iOS Auto Layout intrinsicContentSize 内容大小

intrinsicContentSize 内在内容大小

使用AutoLayout 时,视图内容的大小通过每个视图的 intrinsicContentSize 属性表达,它描述了在数据未经压缩或剪裁的情况下表达视图全部内容所需的最小空间。该属性源于每个视图所呈现内容的自然属性。

对于图像视图,内在内容大小与其呈现的图像大小相符。图像越大,需要的内容大小也越大。
对于按钮,内在内容的大小随着按钮的名称而变化(title)。

通过视图的内在内容大小,Auto Layout将视图框架尽可能地与其自然内容相匹配。无歧义的布局通常需要给每个坐标轴设置两个属性,当视图有一个内在内容大小时,则只需设置两个属性中的一个。

当改变了视图的内在内容时,需要调用 invalidateIntrinsicContentSize 方法,让AutoLayout 知道在下次布局时重新计算。

例子1:

#import "XJYLabel.h"
@implementation XJYLabel
- (instancetype)init {
    if (self = [super init]) {

    }
    return self;
}
- (CGSize)intrinsicContentSize {
    return CGSizeMake(100, 100);
}
@end

例子2:

#pragma mark - Layout

// 如果原有的视图尺寸和现在的不相符,
- (void)layoutSubviews {
    [super layoutSubviews];
    _collectionView.frame = self.bounds;
    if (!CGSizeEqualToSize(self.bounds.size, [self intrinsicContentSize])) {
        [self invalidateIntrinsicContentSize];
    }
}

- (CGSize)intrinsicContentSize {
    return _layout.collectionViewContentSize;
}

#pragma mark - Public methods

- (void)reload {
    [_collectionView reloadData];
    [self invalidateIntrinsicContentSize];
}   
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值