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 ответов
Я обнаружил проблему! Удивительный баг!
Это упражнение. Я добавил две кнопки к левому элементу навигации, выполнив это:
- создать вид
- добавить два
UIButtons
внутри этого взгляда. - добавьте это представление к левому элементу навигации.
Это было скомпилировано для iOS 9 и работает на устройстве с iOS 10 и ниже, но не iOS 11.
"Правильный" способ сделать это заключается в следующем
- Перетащите
UIButton
к левому элементу навигации. - Перетащите другой
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 в Интерфейсном Разработчике, и это работает после этого.