自定义UIBarButtonItem在iOS 8和9

时间:2017-10-03 15:07:33

标签: ios uiview uinavigationbar uibarbuttonitem

我正在尝试实施自定义UIBarButtonItem。我已经将其子类化了(出于其他原因)并且我遇到了一个问题,它在iOS 10和11中正确放置,但在iOS 8和9中完全错位。

这是它在iOS 10和11中的样子,并且是正确的: iOS 10

这是iOS 8和9中的样子,完全错误: iOS 9

如果有新功能,按钮应显示一种“徽章”,但我现在不会进入。只是不回答“你不需要子类/ wrapperView,你可以在init中发送customView”,这种方法还有其他原因。我正在简化这个问题。

在我的自定义UIBarButtonItem的初始化设备中,我创建了一个UIButton和一个UIView,即:buttonwrapperView

wrapperView是基本UIView,其中包含buttonbutton被约束为特定宽度,并且被约束为适合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!

0 个答案:

没有答案