CustomView UIBarButtonItem适用于iPhone 6以外的所有手机

时间:2018-01-25 06:36:09

标签: ios swift uibutton uibarbuttonitem

我使用以下代码创建了一个带有自定义视图的UIBarButtonItem(我指定了profileImageButton框架的尺寸,尺寸为40x40)。

let profileImageButton = UIButton(type: .custom)
profileImageButton.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
profileImageButton.setImage(imageCache.getProfileImage(), for: .normal)
profileImageButton.layer.cornerRadius = 20
profileImageButton.layer.masksToBounds = true
profileImageButton.addTarget(self, action: #selector(self.openSettings), for: .touchUpInside)
let settingsButton = UIBarButtonItem(customView: profileImageButton)

在大多数设备上,视图的帧数为40x40。但是,当我在iPhone 6s上运行它时,它看起来有点矩形。所以我在Xcode的调试层次结构功能中打印出它的帧。我得到的结果是:frame = (0 0; 50 44),我假设这意味着框架的尺寸为50x44。因此,我的问题是为什么iPhone 6s不能保持指定的40x40尺寸?

2 个答案:

答案 0 :(得分:1)

在iOS 11中,具有自定义视图的UIBarButtonItem的大小由自定义视图的内部约束决定。你没有提供任何内部约束,所以所有的赌注都是关闭的;你没有让自己负责酒吧按钮项目的大小。为此,请为profileImageButton提供宽度约束和高度约束。

答案 1 :(得分:0)

添加到matt的答案,我还需要在iOS 11中添加这三行代码:

profileImageButton.translatesAutoresizingMaskIntoConstraints = false
profileImageButton.heightAnchor.constraint(equalToConstant: 40).isActive = true
profileImageButton.widthAnchor.constraint(equalToConstant: 40).isActive = true