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 搜索即可~


相关推荐
小蜜蜂嗡嗡1 分钟前
【flutter项目从xcode运行时报错:Undefined symbol: _OBJC_CLASS_$_WeiboSDK】
flutter·cocoa·xcode
Sheffi663 分钟前
RunLoop 深度探索:线程为什么不会自动退出
macos·objective-c·cocoa
2501_915918412 小时前
Flutter 加固方案全解析,从 Dart 层到 IPA 成品的多工具协同防护体系
flutter·macos·ios·小程序·uni-app·cocoa·iphone
碧水澜庭2 小时前
Mac升级集成Gemini的Chrome浏览器完整指南
chrome·macos·ai编程
wsxlgg2 小时前
IOS 打包上传提示you do not have required contracts to perform an operation
ios
每周报刊2 小时前
初代 iPhone SE 谢幕:被标为 “过时”,小屏旗舰时代彻底落幕
ios·iphone
RollingPin3 小时前
iOS 动态库与静态库的区别
ios·framework·动态库·静态库·符号表·三方库·dyld
Digitally3 小时前
如何将照片从 Mac 传输到 Android
android·macos
0xAaron3 小时前
ips 文件符号化
ios·swift·调试·ips·符号化
AirDroid_cn3 小时前
iPhone放大镜跟随模式下,画面抖动,如何稳定?
macos·ios·objective-c·cocoa·iphone·ipad