UIBarButtonItem не активируется на iOS 11 beta 7?

Есть еще один вопрос к SO по этому поводу, но это не имеет к этому никакого отношения, потому что я думаю, что это связано с бета-версией iOS 11.

У меня есть эти 2 UIButtonсгруппированы внутри UIView, Этот UIView помещен внутри UIBarButtonItem и все это установлено как Left Bar Button Items, используя Interface Builder.

При нажатии каждой кнопки отображается всплывающее окно, запускаемое раскадровкой.

Я тестирую это на iPad 3, работающем под управлением iOS 9 и Xcode 8. Это прекрасно работает.

Теперь я решил проверить это на своем iPad Pro 9.7", который работает под управлением iOS 11 beta 7. Я использую Xcode 9 beta 6. Когда я запускаю это на iPad Pro, все кнопки на панели навигации не работают. Теперь я пробую ту же бета-версию Xcode 9 и запускаю приложение на iPad 3 с iOS 9 и снова все работает замечательно.

Я компилирую для iOS 9.1.

Кнопки даже не подсвечивают, чтобы подтвердить нажатие, как в iOS 9.

Есть ли проблема с iOS 11 beta 7 и пунктами панели?

Есть идеи?

5 ответов

Решение

Я обнаружил проблему! Удивительный баг!

Это упражнение. Я добавил две кнопки к левому элементу навигации, выполнив это:

  1. создать вид
  2. добавить два UIButtons внутри этого взгляда.
  3. добавьте это представление к левому элементу навигации.

Это было скомпилировано для iOS 9 и работает на устройстве с iOS 10 и ниже, но не iOS 11.

"Правильный" способ сделать это заключается в следующем

  1. Перетащите UIButton к левому элементу навигации.
  2. Перетащите другой UIButton к левому элементу навигации.

Вы увидите, что iOS это позволяет, и будет управлять обеими кнопками в разделе "Элементы навигации".

это будет работать на всех версиях iOS, которые я тестировал с 9 по 11.

Я обнаружил, что тот же код, созданный с помощью XCode 8, хорошо работает на ios10-11, но при сборке с XCode 9 UIBarButtonItem с пользовательским представлением не реагирует на щелчки.

похоже, проблема возникает из-за того, что в ios 11 панель навигации использует автоматическое расположение вместо работы с фреймами. Кнопки на экране выглядят хорошо, но, кажется, технически они за кадром.

Так что мое исправление заключается в добавлении автоматического ограничения макета в мой пользовательский вид.

//my custom view init
let view = MyCustomView()
view.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
let rightButtonItem = UIBarButtonItem(customView: view)

//constraints
let widthConstraint = view.widthAnchor.constraint(equalToConstant: 44)
let heightConstraint = view.heightAnchor.constraint(equalToConstant: 44)

heightConstraint.isActive = true
widthConstraint.isActive = true

//add my view to nav bar 
self.rightBarButtonItem = rightButtonItem

После этого пользовательская кнопка правой панели успешно получает клики.

Я получил это работает, добавив этот метод в UIBarButtonItem:

[self.barBTNItem setWidth:44];

Позвольте нажать:

UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(manualAdd.dismissKeyboard))  
tap.cancelsTouchesInView = false  // this line is required for xcode 9  
view.addGestureRecognizer(tap)  

У меня была такая же проблема при обновлении до iOS 11.

Размер UIView, содержащий кнопки, был 0x0.

Я установил высоту x ширину UIView в Интерфейсном Разработчике, и это работает после этого.

Другие вопросы по тегам