UIBarButtonItem 在 iOS 11 beta 7 上不可点击?
UIBarButtonItem not clickable on iOS 11 beta 7?
SO 上还有一个关于此的问题,但这与它无关,因为我认为这与 iOS 11.
的测试版有关
我有这 2 个 UIButton
分组在一个 UIView
中。这个 UIView 被放在一个 UIBarButtonItem
中,整个东西被设置为 Left Bar Button Items
,使用 Interface Builder。
单击每个按钮时,会显示一个由故事板触发的弹出窗口。
我正在 iPad 3,运行ning iOS 9,使用 Xcode 8 进行测试。效果非常好。
现在我决定在我的 iPad Pro 9.7" 上进行测试,即 运行ning iOS 11 beta 7。我正在使用 Xcode 9 beta 6 . 当我在 iPad Pro 上 运行 这个时,导航栏上的所有按钮都死了。他们不响应点击。现在我尝试相同的 Xcode 9 beta 6 和 运行 iPad 3 和 iOS 9 上的应用程序,一切都非常好。
我正在为 iOS 9.1.
编译
按钮甚至不会像在 iOS 9.
上那样突出显示以确认点击
iOS 11 beta 7 和栏按钮项目有问题吗?
有什么想法吗?
我发现问题了!惊人的错误!
这是演习。我通过这样做向左侧导航项添加了两个按钮:
- 创建视图
- 在该视图中添加两个
UIButtons
。
- 将该视图添加到左侧导航项。
这是为 iOS 9 编译的,适用于 iOS 10 及以下但不适用于 iOS 11 的设备。
"correct" 方法是这样
- 将
UIButton
拖到左侧导航项。
- 将另一个
UIButton
拖到左侧导航项。
您会看到 iOS 允许这种情况发生并将管理 "navigation items" 下的两个按钮。
这适用于我从 9 到 11 测试过的所有 iOS 版本。
我发现使用 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
自定义右栏按钮成功接收点击后。
点击:
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。
我在 Interface Builder 上修复了 UIView 的高度 x 宽度,之后它就可以工作了。
我通过将此方法添加到 UIBarButtonItem 来实现此功能:
[self.barBTNItem setWidth:44];
SO 上还有一个关于此的问题,但这与它无关,因为我认为这与 iOS 11.
的测试版有关我有这 2 个 UIButton
分组在一个 UIView
中。这个 UIView 被放在一个 UIBarButtonItem
中,整个东西被设置为 Left Bar Button Items
,使用 Interface Builder。
单击每个按钮时,会显示一个由故事板触发的弹出窗口。
我正在 iPad 3,运行ning iOS 9,使用 Xcode 8 进行测试。效果非常好。
现在我决定在我的 iPad Pro 9.7" 上进行测试,即 运行ning iOS 11 beta 7。我正在使用 Xcode 9 beta 6 . 当我在 iPad Pro 上 运行 这个时,导航栏上的所有按钮都死了。他们不响应点击。现在我尝试相同的 Xcode 9 beta 6 和 运行 iPad 3 和 iOS 9 上的应用程序,一切都非常好。
我正在为 iOS 9.1.
编译按钮甚至不会像在 iOS 9.
上那样突出显示以确认点击iOS 11 beta 7 和栏按钮项目有问题吗?
有什么想法吗?
我发现问题了!惊人的错误!
这是演习。我通过这样做向左侧导航项添加了两个按钮:
- 创建视图
- 在该视图中添加两个
UIButtons
。 - 将该视图添加到左侧导航项。
这是为 iOS 9 编译的,适用于 iOS 10 及以下但不适用于 iOS 11 的设备。
"correct" 方法是这样
- 将
UIButton
拖到左侧导航项。 - 将另一个
UIButton
拖到左侧导航项。
您会看到 iOS 允许这种情况发生并将管理 "navigation items" 下的两个按钮。
这适用于我从 9 到 11 测试过的所有 iOS 版本。
我发现使用 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
自定义右栏按钮成功接收点击后。
点击:
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。
我在 Interface Builder 上修复了 UIView 的高度 x 宽度,之后它就可以工作了。
我通过将此方法添加到 UIBarButtonItem 来实现此功能:
[self.barBTNItem setWidth:44];