iPhone X下UIBarButtonItem垂直向上对齐定位问题求助
解决iPhone X适配中Toolbar按钮顶部对齐的问题
嘿,这个适配问题我当初做iPhone X兼容的时候也踩过坑!你已经搞定了Toolbar高度调整这一步,接下来让按钮顶部对齐其实有两种很实用的方法,看你习惯哪种:
方法一:用自定义视图+约束精准控制
如果希望每个按钮的位置都能精准把控,最稳妥的方式是给UIBarButtonItem套一层自定义的UIButton,然后直接给按钮加顶部约束:
// 创建自定义按钮 let actionButton = UIButton(type: .system) actionButton.setTitle("我的按钮", for: .normal) actionButton.sizeToFit() // 开启约束支持,设置顶部对齐 actionButton.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ // 按钮顶部和Toolbar顶部留8pt间距(可根据需求调整) actionButton.topAnchor.constraint(equalTo: yourToolbar.topAnchor, constant: 8), // 按钮左侧和Toolbar左侧留16pt间距 actionButton.leadingAnchor.constraint(equalTo: yourToolbar.leadingAnchor, constant: 16) ]) // 把自定义按钮包装成BarButtonItem let barItem = UIBarButtonItem(customView: actionButton) yourToolbar.setItems([barItem], animated: false)
如果是用Objective-C开发,代码逻辑是一致的:
UIButton *actionButton = [UIButton buttonWithType:UIButtonTypeSystem]; [actionButton setTitle:@"我的按钮" forState:UIControlStateNormal]; [actionButton sizeToFit]; actionButton.translatesAutoresizingMaskIntoConstraints = NO; [NSLayoutConstraint activateConstraints:@[ [actionButton.topAnchor constraintEqualToAnchor:yourToolbar.topAnchor constant:8], [actionButton.leadingAnchor constraintEqualToAnchor:yourToolbar.leadingAnchor constant:16] ]]; UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:actionButton]; [yourToolbar setItems:@[barItem] animated:NO];
方法二:调整Toolbar的内容内边距快速实现
如果不想给每个按钮都加自定义视图,也可以直接调整Toolbar的contentEdgeInsets,通过加大底部内边距的方式,把所有按钮往上挤:
// 假设你给Toolbar额外增加的高度是34(对应iPhone X的Home Indicator高度) // 顶部留8pt间距,底部留34pt给Home Indicator,左右保持0 yourToolbar.contentEdgeInsets = UIEdgeInsets(top: 8, left: 0, bottom: 34, right: 0)
这种方式更快捷,适合Toolbar上按钮较多、不需要单独调整位置的场景。
额外提醒
其实苹果官方推荐的适配方式是让Toolbar自动适配Safe Area,也就是设置toolbar.safeAreaLayoutGuide相关约束,但既然你已经手动调整了Toolbar高度,上面的两种方法更贴合你的当前需求。
内容的提问来源于stack exchange,提问作者Casey Perkins
相关产品推荐
相关产品推荐

