• iOS Autolayout 约束设置【顺序】的重要性!


    0x00 顺序不同,结果不同

    看图说话 1

    请添加图片描述

    代码是这样滴~
    设置好约束,让 4 个按钮,宽度均分~
    结果如上图

        [_pastButton.topAnchor constraintEqualToAnchor:_textView.bottomAnchor constant:6].active = YES;
        [_pastButton.leftAnchor constraintEqualToAnchor:_textView.leftAnchor].active = YES;
        [_pastButton.heightAnchor constraintEqualToConstant:44].active = YES;
        
        NSArray *buttons = @[_pastButton, _deleteButton, _breakButton, _inputButton];
        for (NSInteger i = 0; i < buttons.count-1; i++) {
            UIButton *button1 = buttons[i];
            UIButton *button2 = buttons[i+1];
            
            [button2.topAnchor constraintEqualToAnchor:button1.topAnchor].active = YES;
            [button2.leftAnchor constraintEqualToAnchor:button1.rightAnchor constant:10].active = YES;
            [button2.heightAnchor constraintEqualToAnchor:button1.heightAnchor].active = YES;
            [button2.widthAnchor constraintEqualToAnchor:button1.widthAnchor].active = YES;
            
            if (i == buttons.count-1) {
                [button2.rightAnchor constraintEqualToAnchor:_textView.rightAnchor].active = YES;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    看图说话 2

    请添加图片描述

    代码是这样滴~
    设置好约束,让 4 个按钮,宽度均分~
    结果如上图,完美!

        [_pastButton.topAnchor constraintEqualToAnchor:_textView.bottomAnchor constant:6].active = YES;
        [_pastButton.leftAnchor constraintEqualToAnchor:_textView.leftAnchor].active = YES;
        [_pastButton.heightAnchor constraintEqualToConstant:44].active = YES;
        
        [_inputButton.rightAnchor constraintEqualToAnchor:_textView.rightAnchor].active = YES;
        
        NSArray *buttons = @[_pastButton, _deleteButton, _breakButton, _inputButton];
        for (NSInteger i = 0; i < buttons.count-1; i++) {
            UIButton *button1 = buttons[i];
            UIButton *button2 = buttons[i+1];
            
            [button2.topAnchor constraintEqualToAnchor:button1.topAnchor].active = YES;
            [button2.leftAnchor constraintEqualToAnchor:button1.rightAnchor constant:10].active = YES;
            [button2.heightAnchor constraintEqualToAnchor:button1.heightAnchor].active = YES;
            [button2.widthAnchor constraintEqualToAnchor:button1.widthAnchor].active = YES;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    0x02 代码区别

    图 1 的代码,是在最后一步添加,最后一个按钮,的右侧约束

            if (i == buttons.count-1) {
                [button2.rightAnchor constraintEqualToAnchor:_textView.rightAnchor].active = YES;
            }
    
    • 1
    • 2
    • 3

    图 2 的代码,是在开始添加,最后一个按钮,的右侧约束

            [_inputButton.rightAnchor constraintEqualToAnchor:_textView.rightAnchor].active = YES;
    
    • 1

    可见,
    约束设置顺序,是多么滴重要!


    0x03 我的小作品

    欢迎体验我的作品之一:小五笔 86 版
    五笔学习好帮手
    App Store 搜索即可~


  • 相关阅读:
    JAVA毕业设计WEBOA办公信息管理系统计算机源码+lw文档+系统+调试部署+数据库
    非负数组中两个数相与的最大结果
    IP证书有什么作用?怎么申请?
    小迪安全37WEB 攻防-通用漏洞&XSS 跨站&权限维持&钓鱼捆绑&浏览器漏洞
    【yolov5】pytorch模型导出为onnx模型
    在ubuntu上安装ns2和nam(ubuntu16.04)
    S5PV210裸机(七):Nand和iNand
    抖店token的生成和刷新的实际开发笔记
    论文翻译 | PROMPTAGATOR : FEW-SHOT DENSE RETRIEVAL FROM 8 EXAMPLES
    归并排序 图解 递归 + 非递归 + 笔记
  • 原文地址:https://blog.csdn.net/xjh093/article/details/134078768