美文网首页iOS DeveloperiOS 开发
UINavigationController&UITab

UINavigationController&UITab

作者: 离线0_0留言 | 来源:发表于2016-07-21 16:25 被阅读219次

    iOS7以后的app都是全屏的,意思就是所有控制器的view默认都是从屏幕的 (0,0)开始。
    这时候用到导航栏时,往往会出现view被导航栏挡住情况。
    最明显的是用到tableView时,第一行的数据或者headerView会被导航栏遮盖。
    个人总结两种处理办法:

    NO.1:

    (如果你不需要导航栏半透明效果。)

    self.navigationController.navigationBar.translucent = NO;
    

    在控制器下设置导航控制器的导航栏的translucent(半透明)属性为NO,
    translucent属性在ios6之前默认为NO,而在iOS7以后的导航栏默认却是半透明的,为YES,所以该属性不会占据空间。

    NO.2:

    iOS7为了达到全屏效果的app,查看官方文档,增加了几个属性:

    @property(nonatomic,assign) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll
    @property(nonatomic,assign) BOOL extendedLayoutIncludesOpaqueBars NS_AVAILABLE_IOS(7_0); // Defaults to NO, but bars are translucent by default on 7_0.  
    @property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets NS_AVAILABLE_IOS(7_0); // Defaults to YES
    
    self.edgesForExtendedLayout = UIRectEdgeNone;
    设置完这一句,压入桟的控制器frame的y值就是从导航条下面开始,
    同时如果有tabBar,控制器的下边界贴住的也是tabBar的上边界。
    
    self.extendedLayoutIncludesOpaqueBars = NO;
    NO 代表展开的时候不要包含那个导航条
    
    self.automaticallyAdjustsScrollViewInsets = YES;
    若用到tableview,默认YES,实际内部改变了了scrollView 的 contentInsets 
    (比如 group 样式的 tableView 的 insets.top=64 )
    

    属性edgesForExtendedLayout意思是边缘向四周展开
    edgesForExtendedLayout的值是结构体。
    默认值是UIRectEdgeAll,也就是上下左右填充满整个屏幕。
    UIRectEdgeNone是不要往四周边缘展开 (也就是iOS7以前的效果)
    所以只要

    self.edgesForExtendedLayout = UIRectEdgeNone;```
    就好了
    

    相关文章

      网友评论

        本文标题:UINavigationController&UITab

        本文链接:https://www.haomeiwen.com/subject/vkmbjttx.html