iOS navigation设置问题二:Right/Left C
2018-04-20 本文已影响19人
圆脸黑猫警长
问题:ios11 以后Right/Left CustomView和屏幕边缘的间距进行了调整,11上为16point,10为8point。导致在两种版本上的边距显示不正确。
原因:Right/Left CustomView 的layoutMargins系统进行了设置。
(lldb) po self.navigationController?.navigationBar.subviews[2].layoutMargins
▿ Optional<UIEdgeInsets>
▿ some : UIEdgeInsets
- top : 0.0
- left : 16.0
- bottom : 0.0
处理方案:
自定义navgationbar,重新设置layoutMargins。
在自定义的navigationBar中加入如下代码:
-(void)layoutSubviews
{
[super layoutSubviews];
for (UIView *view in self.subviews)
{
view.layoutMargins = UIEdgeInsetsZero;
}
}
如何改为自定义的navBar?
方案一:在storyboard中选中navbar设置其class为自定义的即可,用处理方案中的代码即可。
方案二:代码设置需要首先自定义navigationController,重写其- (void)viewDidAppear:(BOOL)animated
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// 添加修正方法
for (UIView *view in self.navigationBar.subviews)
{
view.layoutMargins = UIEdgeInsetsZero;
}
}
注意:
navigationBar属性是只读的,而且在sb中加载完后就已经完成了全部的customView,所以在代码中设置自定义navBar则不能正确加载sb中的customView,除非代码去重新设置customView。
参考:
https://forums.developer.apple.com/thread/80075#280515
http://www.matrixprojects.net/p/uibarbuttonitem-ios11/