当前位置:首页 > 通信资讯 > 正文

ios 11 uinavigationitem 去"}(ios 11 uinavigationitem 去"})

前言

ios 11版本由于对于nav层级结构的改变,导致以前的方法无法达到理想的移动效果,使顶部的按钮完全靠左,或者是靠右.

修改思路

在ios11之前保持原有方式进行设置,ios11之后进行额外的边距约束修改达到移动效果.

从viewdebug的界面上观察可以看到需要将uibuttonbarstackview距离左边和右边的16的约束改为0即可.

ios 11 uinavigationitem 去"}(ios 11 uinavigationitem 去"})

核心代码

配置导航器view代码

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 //0:leftbarbuttonitems,1:rightbarbuttonitems - (void)initbaritem:(uiview*)view withtype:(int)type{ uibarbuttonitem * buttonitem = [[uibarbuttonitem alloc]initwithcustomview:view]; //解决按钮不靠左 靠右的问题.ios 11系统需要单独处理 uibarbuttonitem * spaceitem = [[uibarbuttonitem alloc]initwithbarbuttonsystemitem:uibarbuttonsystemitemfixedspace target:nil action:nil]; spaceitem.width = -16;//这个值可以根据自己需要自己调整 switch (type) { case 0: if (!is_ios_version_11) { self.navigationitem.leftbarbuttonitems =@[spaceitem,buttonitem]; }else{ self.navigationitem.leftbarbuttonitems =@[buttonitem]; } break; case 1: if (!is_ios_version_11) { self.navigationitem.rightbarbuttonitems =@[spaceitem,buttonitem]; }else{ self.navigationitem.rightbarbuttonitems =@[buttonitem]; } break; default: break; } }

处理ios11情况下的偏移问题,将边距为16的约束的值改为0.

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -(void)viewdidlayoutsubviews{ if (!is_ios_version_11) return; uinavigationitem * item=self.navigationitem; nsarray * array=item.leftbarbuttonitems; if (array&&array.count!=0){ //这里需要注意,你设置的第一个leftbarbuttonitem的customeview不能是空的,也就是不要设置uibarbuttonsystemitemfixedspace这种风格的item uibarbuttonitem * buttonitem=array[0]; uiview * view =[[[buttonitem.customview superview] superview] superview]; nsarray * arrayconstraint=view.constraints; for (nslayoutconstraint * constant in arrayconstraint) { if (fabs(constant.constant)==16) { constant.constant=0; } } } }

ios 11 uinavigationitem 去"}(ios 11 uinavigationitem 去"})

改后效果.png

demo地址:https://github.com/stonemover/navdemo.git

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://www.jianshu.com/p/8ebc6866ac3e?utm_source=tuicool&utm_medium=referral

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。