美文网首页iOS开发那些事IOS开发iOS Developer
IOS开发中topLayoutGuide与bottomLayou

IOS开发中topLayoutGuide与bottomLayou

作者: binge | 来源:发表于2017-02-10 14:27 被阅读4675次

    在IOS开发的过程中我们经常会遇到一些紧贴tabbar有工具条之类的页面,比如说购买、支付等页面,往往这些页面有时候在栈底显示(页面有tabbar),有时不在(页面没有tabbar)。比如:


    shop.png

    这种页面对于常规的做法是有tabbar的时候设置一套约束,没有tabbar的时候更新一下约束。但是苹果提过了一个bottomLayoutGuide可以让我们更优雅的处理这类问题。
    代码如下:

    _bottomView = [UIView new];
        _bottomView.backgroundColor = [UIColor yellowColor];
        [self.view addSubview:_bottomView];
        [_bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.height.equalTo(@40);
            make.left.and.right.equalTo(self.view);
            make.bottom.equalTo(self.mas_bottomLayoutGuide);
        }];
    

    搭配Masonry,使用Masonry提供的mas_bottomLayoutGuide仅需一行我们就可以实现这样的效果。

    同样来说这种效果对于navigationBar也适用——topLayoutGuide。对应的Masonry使用方法是mas_topLayoutGuide。
    完整代码(代码量太少就不给完整的链接了):

    #import "ViewController.h"
    #import "Masonry.h"
    @interface ViewController ()
    @property (strong, nonatomic) UIView *topView;
    @property (strong, nonatomic) UIView *bottomView;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        btn.frame = CGRectMake(0, 164, 80, 50);
        [btn setTitle:@"top" forState:UIControlStateNormal];
        btn.backgroundColor = [UIColor redColor];
        [btn addTarget:self action:@selector(topClick) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:btn];
        
        UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
        btn1.backgroundColor = [UIColor yellowColor];
        btn1.frame = CGRectMake(0, 264, 80, 50);
        [btn1 setTitle:@"bottom" forState:UIControlStateNormal];
        [btn1 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [btn1 addTarget:self action:@selector(bottomClick) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:btn1];
        [self initView];
    }
    
    - (void)initView {
        _topView = [UIView new];
        _topView.backgroundColor = [UIColor greenColor];
        [self.view addSubview:_topView];
        [_topView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.height.equalTo(@40);
            make.left.and.right.equalTo(self.view);
            
            make.top.equalTo(self.mas_topLayoutGuide);
            
        }];
        
        _bottomView = [UIView new];
        _bottomView.backgroundColor = [UIColor yellowColor];
        [self.view addSubview:_bottomView];
        [_bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.height.equalTo(@40);
            make.left.and.right.equalTo(self.view);
            make.bottom.equalTo(self.mas_bottomLayoutGuide);
        }];
    }
    - (void)topClick{
    
        [self.navigationController setNavigationBarHidden:!self.navigationController.navigationBarHidden animated:NO];
    //    [self updateViewConstraints];
    }
    - (void)bottomClick{
        
        [self.navigationController setToolbarHidden:!self.navigationController.toolbarHidden animated:NO];
        // 手动触发updateViewConstraints
    //    [self updateViewConstraints];
    }
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    
    @end
    

    相关文章

      网友评论

      • 迷曳:导航栏透明时。topLayoutGuide iOS 10.31时是有问题的
      • objcat:这里会遇到一个问题 如果是childViewController 并且不使用新特性safeArea进行约束 并且在导航栏不透明的情况下 使用layoutGuide会出现child边长的问题
        binge:@objcat 我看下 以前没注意到过:smiley:
      • xxttw:下次试试

      本文标题:IOS开发中topLayoutGuide与bottomLayou

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