介绍
这篇文章主要介绍了iOS怎么去掉导航栏下方的横线,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
网上有很多关于隐藏的方法,设置后能够成功,但是跳转到其他界面的时候发现,其他界面横线也被隐藏了。
目前主流的方法是将shadowImage用一张空的图片图片替换掉
可是这种方法不能解决导航控制器里面的某个界面隐藏,其他不变的问题。
[self.navigationController.navigationBar setBackgroundImage: [[UIImage alloc], init], forBarMetrics: UIBarMetricsDefault); self.navigationController.navigationBar.shadowImage =, [[UIImage alloc], init);
通过xcode查看UINavigationBar的树形结构发现,可以很清楚的看出横线就是下面的_UIBarBackground下面的UIImageView对象
树形结构如下
* * UINavigationBar * * * *——[,1],_UIBarBackground * * * * - - - - - [,2],UIImageView * * * * - - - - - [,2],UIVisualEffectView * * * * - - - - - - [,3],_UIVisualEffectBackdropView * * * * - - - - - - [,3],_UIVisualEffectFilterView * * * *——[,1],UINavigationButton * * * * - - - - - [,2],UIButtonLabel * * * *——[,1],_UINavigationBarBackIndicatorView * *
所以能不能遍历UINavigationBar的所有子视图然后找到横线对应的UIImageView对象,隐藏掉呢?
遍历UINavigationBar所有的子视图获取子视图的数组。
NSArray * allSubviews (UIView *一览),{ ,NSArray * results =, (aView 子视图); ,for (UIView * eachView  aView.subviews拷贝) ,{ ,,NSArray * subviews =, allSubviews (eachView); ,,if (子视图) ,,,,results =, (results arrayByAddingObjectsFromArray:子视图); ,} ,return 结果; }
遍历数组找到横线对应的UIImageView对象
@property (原子,,强烈),UIImageView * shadowImage;
安康;(空白)那些:动画(BOOL) { ,,(super 那些:动画); NSArray 才能;* subViews =, allSubviews (self.navigationController.navigationBar); for 才能;(UIView * view 拷贝子视图),{ ,,,if ([view isKindOfClass: [UIImageView 类]],,,,view.bounds.size.height<1) { ,,,,//实践后发现系统的横线高度为0.333 ,,,,,self.shadowImage =, (UIImageView *); ,,,} ,,} 时间=self.shadowImage.hidden 才能;是的; }
最后在viewDidDisappear方法里面还原显示状态。
安康;(void) viewWillDisappear:动画(BOOL) { ,,(super viewWillDisappear:动画); self.shadowImage.hidden 才能,=,没有; }
运行后发现完美解决
感谢你能够认真阅读完这篇文章,希望小编分享的“iOS怎么去掉导航栏下方的横线”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!