当前位置: 代码网 > it编程>App开发>苹果IOS > iOS开发Masonry与Frame布局差异示例详解

iOS开发Masonry与Frame布局差异示例详解

2024年05月15日 苹果IOS 我要评论
ios开发masonry与frame布局差异示例#import "viewcontroller.h"#import <masonry/masonry.h>@interface viewco

 ios开发masonry与frame布局差异

示例

#import "viewcontroller.h"
#import <masonry/masonry.h>
@interface viewcontroller ()
@property (nonatomic, strong)uiview *view1;
@property (nonatomic, strong)uiview *view2;
@property (nonatomic, strong)uiview *view3;
@end
@implementation viewcontroller
- (void)viewdidload {
    [super viewdidload];
    // do any additional setup after loading the view.
    [self.view addsubview:self.view1];
    [self.view addsubview:self.view2];
    [self.view addsubview:self.view3];
    [self.view1 mas_makeconstraints:^(masconstraintmaker *make) {
        make.left.mas_equalto(14.272189);
        make.right.mas_equalto(-14.272189);
        make.top.mas_equalto(50);
        make.height.mas_equalto(89.795858);
    }];
    [self.view2 mas_makeconstraints:^(masconstraintmaker *make) {
        make.left.mas_equalto(30);
        make.top.mas_equalto(200);
        make.size.mas_equalto(cgsizemake(172.455621, 89.795858));
    }];
    self.view3.frame = cgrectmake(30, 400, 172.455621, 89.795858);
}
- (void)viewdidlayoutsubviews {
    [super viewdidlayoutsubviews];
    nslog(@"view1:%lf,%lf,%lf,%lf",self.view1.frame.origin.x,self.view1.frame.size.width,self.view1.frame.size.height,self.view.frame.size.width-(14.272189*2));
    nslog(@"view2:%lf,%lf",self.view2.frame.size.width,self.view2.frame.size.height);
    nslog(@"view3:%lf,%lf",self.view3.frame.size.width,self.view3.frame.size.height);
}
#pragma mark -
- (uiview *)view1 {
    if (!_view1) {
        _view1 = [[uiview alloc] init];
        _view1.backgroundcolor = [uicolor redcolor];
    }
    return _view1;
}
- (uiview *)view2 {
    if (!_view2) {
        _view2 = [[uiview alloc] init];
        _view2.backgroundcolor = [uicolor bluecolor];
    }
    return _view2;
}
- (uiview *)view3 {
    if (!_view3) {
        _view3 = [[uiview alloc] init];
        _view3.backgroundcolor = [uicolor yellowcolor];
    }
    return _view3;
}
@end

结果

ios14.1 iphone6s
view1:14.500000,346.000000,90.000000,346.455622
view2:172.500000,90.000000
view3:172.455621,89.795858

ios16.4 iphone14
view1:14.333333,361.333333,89.666667,361.455622
view2:172.333333,89.666667
view3:172.455621,89.795858

自动布局时系统会根据屏幕分辨率将传入的数值转换为最接近屏幕分辨率展示的大小

如:

view1中传入的左右大小为14.272189,在iphone6s(2x)中最接近能展示的14.5,故自动布局后宽为346.0(375.0-14.5-14.5);在iphone14(3x)中最接近能展示的14.33333,故自动布局后宽为361.333333(390.0-14.33333-14.33333)。

view2宽度在iphone14(3x)中最接近能展示的172.333333(与172.333333相差0.122288,与172.666667相差0.211046)。

注意:如uilabel未设置其具体高度,masonry会根据其展示需要的宽高(可通过boundingrectwithsize...方法获取)及屏幕分辨率向上适配至最小宽高

以上就是ios开发masonry与frame布局差异示例详解的详细内容,更多关于ios masonry frame布局差异的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com