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;
        }
    }

看图说话 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;
    }

0x02 代码区别

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

复制代码
        if (i == buttons.count-1) {
            [button2.rightAnchor constraintEqualToAnchor:_textView.rightAnchor].active = YES;
        }

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

复制代码
        [_inputButton.rightAnchor constraintEqualToAnchor:_textView.rightAnchor].active = YES;

可见,

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


0x03 我的小作品

欢迎体验我的作品之一:小五笔 86 版

五笔学习好帮手
App Store 搜索即可~


相关推荐
AI创界者14 小时前
PilotTTS 一键整合包(Win/Mac):8G 显存畅跑,实测解锁情绪与副语言的精准控制
人工智能·macos·aigc·音视频
AirDroid_cn18 小时前
系统终端与iTerm2字体看起来不一样?macOS Sequoia统一渲染指南
macos
初级代码游戏18 小时前
easy Photo Clean公测版:快速清理iPhone照片 邀请公测
ios·iphone
库奇噜啦呼19 小时前
【iOS】RunLoop学习
学习·ios
黑科技iOS上架20 小时前
iOS应用周末提交什么情况算卡审
经验分享·ios
JiaWen技术圈1 天前
2026 年的 macOS 磁盘清理方法
macos
lichong9511 天前
让AI自己用电脑!Cua:后台操作鼠标键盘,Mac/Windows/Linux全支持
人工智能·macos·ai·计算机外设·agent·提示词
A尘埃1 天前
批处理命令(Linux/Mac、Windows项目启动脚本)
linux·windows·macos
zzb15801 天前
ios基础-MVC-UIView
ios·mvc·cocoa