iOS frame布局 与 自动布局有什么区别呢?以及各自的应用场景
问题修改:
通过自动布局,我觉得跟frame 最大的区别就是自动布局可以在依赖的控件发生变化的时候紧跟变化,而frame 做不到的(可能我知识量不够,不知道有别的好方案哈,请指出),如下代码与gif图
/// 这是自动布局的代码
#import "ViewController.h"
#import "UIView+SGExtension.h"
#import "Masonry.h"
@interface ViewController ()
@property (nonatomic, strong) UIView *kenView;
@property (nonatomic, strong) UIButton *kenBtn;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.kenView];
[self.kenView addSubview:self.kenBtn];
[self.kenBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self.kenView);
make.width.equalTo(@(50));
make.height.equalTo(self.kenView.mas_height);
}];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
self.kenView.height += 10;
}
-(UIView *)kenView{
if (_kenView == nil) {
_kenView = [[UIView alloc] init];
_kenView.frame = CGRectMake(0, 0, 100, 100);
_kenView.backgroundColor = [UIColor orangeColor];
}
return _kenView;
}
-(UIButton *)kenBtn{
if (_kenBtn == nil) {
_kenBtn = [UIButton buttonWithType:UIButtonTypeCustom];
_kenBtn.backgroundColor = [UIColor purpleColor];
}
return _kenBtn;
}
@end

/// 这是frame 布局的代码
#import "ViewController.h"
#import "UIView+SGExtension.h"
#import "Masonry.h"
@interface ViewController ()
@property (nonatomic, strong) UIView *kenView;
@property (nonatomic, strong) UIButton *kenBtn;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.kenView];
[self.kenView addSubview:self.kenBtn];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
self.kenView.height += 10;
}
-(UIView *)kenView{
if (_kenView == nil) {
_kenView = [[UIView alloc] init];
_kenView.frame = CGRectMake(0, 0, 100, 100);
_kenView.backgroundColor = [UIColor orangeColor];
}
return _kenView;
}
-(UIButton *)kenBtn{
if (_kenBtn == nil) {
_kenBtn = [UIButton buttonWithType:UIButtonTypeCustom];
_kenBtn.backgroundColor = [UIColor purpleColor];
}
_kenBtn.height = self.kenView.height;
_kenBtn.width = 50;
_kenBtn.center = self.kenView.center;
return _kenBtn;
}
@end

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
AutoLayout 是通过约束来组织 UI 组件之间的关系,它的功能非常丰富广泛,几乎可以完美适配所有的情况,它实际上也是通过约束计算 frame,但是它本质上是一种方程组求解,会带来很大的性能损耗(真的很大),如果在布局非常复杂的地方使用 AutoLayout,基本没可能到 60fps。而 frame 则需要自己计算位置。两者都可以
自动布局主要是在界面上设置,会方便一点。
自动布局主要是建立依赖关系,所以适配的问题考虑的会少很多。
写frame要自己来判断适配的环境了。
纯代码来说,无论是写frame还是自动布局代码量都会很大。
当然自动布局的框架会丰富一些,语法糖更甜一些。