我正在尝试实施自定义UIBarButtonItem
。我已经将其子类化了(出于其他原因)并且我遇到了一个问题,它在iOS 10和11中正确放置,但在iOS 8和9中完全错位。
如果有新功能,按钮应显示一种“徽章”,但我现在不会进入。只是不回答“你不需要子类/ wrapperView,你可以在init中发送customView”,这种方法还有其他原因。我正在简化这个问题。
在我的自定义UIBarButtonItem
的初始化设备中,我创建了一个UIButton
和一个UIView
,即:button
和wrapperView
。
wrapperView
是基本UIView
,其中包含button
。 button
被约束为特定宽度,并且被约束为适合wrapperView
。
在我的自定义初始化程序结束时,我设置了self.customView = wrapperView
。
(wrapperView包含的不仅仅是按钮,因此不能直接设置按钮作为customView)
自定义UIBarButtonItem
完成初始化后,会将其添加到self.navigationItem.rightBarButtonItems = [myButton]
。
有很多代码可以实现,但我会尽我所能:
class MyBarButtonItem:UIBarButtonItem{
let button:UIButton
override init(){
button = UIButton(type: custom)
super.init()
//Set image and add target for button
let wrapperView = UIView()
wrapperView.translatesAutoresizingMaskIntoConstraints = false
button.translatesAutoresizingMaskIntoConstraints = false
wrapperView.addSubview(button)
//constrain button to 0pt from top/leading/bottom/trailing of wrapperView.
//Also constrain button to 26pt width (as wide as my image)
wrapperView.addConstraints([/*myConstraints*/])
button.addConstraint(widthConstraint)
button.clipsToBounds = false
wrapperView.clipsToBounds = false
self.customView = wrapperView
self.style = .plain
}
}
还有更多的代码,但是当我发表评论时,这仍然会发生。知道这里发生了什么吗?
由于我的自定义UIBarButtonItem
只是一个普通的UIBarButtonItem
,其中UIView
(内置子视图和约束)为customView
,然后放入rightBarButtonItems
不应该很容易在右侧显示吗?..这是一个问题,因为我的约束?
编辑
这似乎确实是我的约束问题。在我看来约束在customView
中是“非法的”..一旦我删除任何约束,按钮就会回到它应该的位置..但我不确定我是否完全舒适无约束..
但是,当我现在在iOS 10或11中运行我的代码时,它又一次完全被移动了...... Damnit!