UIBarButtonItem 大小显示错误

Posted

技术标签:

【中文标题】UIBarButtonItem 大小显示错误【英文标题】:UIBarButtonItem size displays wrong 【发布时间】:2018-07-29 18:13:29 【问题描述】:

我有一些自定义的UINavigationBar(用于JSQMessagesViewController)。但我对leftBarButtonItem 有一些问题

func setNavigationBar() 
    let screenSize: CGRect = UIScreen.main.bounds
    let navBar = UINavigationBar(frame: CGRect(x: 0, y: 28, width: screenSize.width, height: 78))
    let navItem = UINavigationItem(title: chatName ?? "chat")
    let menuBtn = UIButton(type: .custom)
    menuBtn.frame = CGRect(x: 0.0, y: 0.0, width: 78, height: 78)
    menuBtn.setImage(UIImage(named: "backButton"), for: .normal)
    menuBtn.addTarget(self, action: #selector(back), for: UIControl.Event.touchUpInside)

    let menuBarItem = UIBarButtonItem(customView: menuBtn)
    let currWidth = menuBarItem.customView?.widthAnchor.constraint(equalToConstant: 78)
    currWidth?.isActive = true
    let currHeight = menuBarItem.customView?.heightAnchor.constraint(equalToConstant: 78)
    currHeight?.isActive = true
    navItem.leftBarButtonItem = menuBarItem


    navBar.titleTextAttributes = [.font : UIFont(name: "Acrom-Bold", size: 26)!, .foregroundColor : UIColor.white]
    navBar.setItems([navItem], animated: false)
    navBar.setBackgroundImage(UIImage(), for: .default)
    navBar.shadowImage = UIImage()
    navBar.backgroundColor = UIColor(displayP3Red: 0, green: 0, blue: 0, alpha: 0.3)
    navBar.isTranslucent = true

    self.view.addSubview(navBar)

但是我的 BackButton 看起来不对。 按钮高度有什么问题?

【问题讨论】:

【参考方案1】:

如果条形按钮项具有自定义视图,您必须使用内部自动布局约束来调整自定义视图的宽度。

但是你不能像你正在做的那样将高度设置为大于运行时喜欢的大小。删除这些行:

let currHeight = menuBarItem.customView?.heightAnchor.constraint(equalToConstant: 78)
currHeight?.isActive = true

【讨论】:

但我有:let currWidth = menuBarItem.customView?.widthAnchor.constraint(equalToConstant: 78) currWidth?.isActive = true let currHeight = menuBarItem.customView?.heightAnchor.constraint(equalToConstant: 78) currHeight?.isActive = true 而且您在 Xcode 控制台中也没有收到投诉? 我删除了 constraint(equalToConstant: 78) 并且没有任何变化。我没有收到来自 Xcode 控制台的错误和投诉 我删除了menuBtn.frame = CGRect(x: 0.0, y: 0.0, width: 78, height: 78) 并添加了constraint(equalToConstant: 78) 得到一些控制台警告:"<NSLayoutConstraint:0x600002a48a50 UILayoutGuide:0x6000030ad340'LeadingBarGuide(0x7ff5ef53dd00)'.height == 44 (active)>", "<NSLayoutConstraint:0x600002a66d00 _UIButtonBarStackView:0x7ff5ef488890.top == UILayoutGuide:0x6000030ad340'LeadingBarGuide(0x7ff5ef53dd00)'.top (active)>", "<NSLayoutConstraint:0x600002a4a8a0 UIButton:0x7ff5ef59bab0.height == 78 (active)>"

以上是关于UIBarButtonItem 大小显示错误的主要内容,如果未能解决你的问题,请参考以下文章

UIBarButtonItem 图像未显示,但显示为红色方块

如何防止 uib-carousel 裁剪 uib-popover?

UIBarButtonItem 未显示在子视图中

uib-datepicker angular js 未显示特定格式的日期时间

UIBarButtonItem 形状不正确

在第一次单击时承诺解决后,uib Popover 未显示