美文网首页
iOS布局原点 (0,0)与(0,64/88)

iOS布局原点 (0,0)与(0,64/88)

作者: OrrHsiao | 来源:发表于2020-11-27 14:43 被阅读0次

    从iOS 7以后ViewController布局起点发生改变,默认情况下从左上角即(0,0)点开始布局,即使屏幕中存在NavigationBar。

    影响因素

    [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.offset(10);
            make.right.offset(-10);
            make.top.offset(10);
            make.bottom.offset(-10);
        }];
    

    ViewController的edgesForExtendedLayout属性
    此属性默认值为UIRectEdgeAll:从左上角即(0,0)点开始布局;
    UIRectEdgeBottom:从导航栏下面,即非刘海屏从(0,64)开始,刘海屏从(0,88)开始;
    UIRectEdgeNone:从导航栏下面,即非刘海屏从(0,64)开始,刘海屏从(0,88)开始,到tabbar上方结束;

    注意:对于TableView ScrollView等视图来说,在导航栏存在的情况下,将布局设置从(0,0)点开始,TableView会自动预留出导航栏的高度,在iOS11及以上,这是由于SafeArea的原因,简单来说就是SafeArea标记了视图可布局的区域,用来确保我们的视图不会被其他东西(导航栏,刘海等)东西挡住。
    在iOS9及以上,这是由于UILayoutGuide的原因,UILayoutGuide用于提供一个矩形区域可以用Auto Layout来定制一些约束特性,作为一个虚拟的view使用。

    //关闭这个特性
    if (@available(iOS 11.0, *)) {
            //禁用自动预留行高
            TableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    }
    ViewController.automaticallyAdjustsScrollViewInsets = NO;
    

    NavigationBar的透明度也会影响到布局原点
    vc.translucent = YES; 设置导航栏半透明,会将布局限制到左上角开始布局。反之则从导航栏下方开始布局。
    vc.extendedLayoutIncludesOpaqueBars = YES;设置导航栏可能透明,也会将布局限制到左上角开始布局。

    相关文章

      网友评论

          本文标题:iOS布局原点 (0,0)与(0,64/88)

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