swift - iOS frame布局 与 自动布局有什么区别呢?以及各自的应用场景
怪我咯
怪我咯 2017-04-18 09:35:42
[iOS讨论组]

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

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
ringa_lee

AutoLayout 是通过约束来组织 UI 组件之间的关系,它的功能非常丰富广泛,几乎可以完美适配所有的情况,它实际上也是通过约束计算 frame,但是它本质上是一种方程组求解,会带来很大的性能损耗(真的很大),如果在布局非常复杂的地方使用 AutoLayout,基本没可能到 60fps。而 frame 则需要自己计算位置。两者都可以

巴扎黑

自动布局主要是在界面上设置,会方便一点。
自动布局主要是建立依赖关系,所以适配的问题考虑的会少很多。
写frame要自己来判断适配的环境了。
纯代码来说,无论是写frame还是自动布局代码量都会很大。
当然自动布局的框架会丰富一些,语法糖更甜一些。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号