sizeToFit 与 sizeThatFit 我的理解

本文介绍了iOS开发中sizeToFit和sizeThatFit的区别和应用场景。sizeThatFits返回适合的尺寸但不改变视图frame,而sizeToFit则会调整视图frame以适应内容。这两个方法常用于动态计算TextView高度等场景,实际应用中sizeToFit计算的尺寸并不依赖于传入参数,而是基于视图内容。
摘要由CSDN通过智能技术生成

先看看苹果官方文档对这连个的方法的解释:

- (CGSize)sizeThatFits:(CGSize)size;     // return 'best' size to fit given size. does not actually resize view. Default is return existing view size
- (void)sizeToFit;                       // calls sizeThatFits: with current view bounds and changes bounds size.

意思是说:

  • (CGSize)sizeThatFits:(CGSize)size; 会返回一个最适合的 Size,但是不会改变原来视图的frame 的size
  • (void)sizeToFit; 内部会调用 - (CGSize)sizeThatFits:(CGSize)size; 方法获取一个最适合的size, 并使用这个size 来调整当前视图的frame 的size.

简单的说:- (CGSize)sizeThatFits:(CGSize)size;- (void)sizeToFit; 都或获取一个最适合的Size, 但是- (CGSize)sizeThatFits:(CGSize)size; 不会改变原始图的frame,仅仅是返回一个size, 而- (void)sizeToFit; 会为你计算一个最合适的Size的同时,并根据这个Size来调整你当前视图的frame




主要应用场景
  • - (CGSize)sizeThatFits:(CGSize)size; 主要用来计算Size, 比如动态调整TextView的高度
#import "ViewController.h"

@interface ViewController ()
@property (strong, nonatomic) UITextView *textView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    
    
    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width
                                                                        , 10)];
    textView.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:textView];
    
    [textView sizeThatFits:CGSizeZero];
    
    self.textView = textView;
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange) name:UITextViewTextDidChangeNotification object:self.textView];
   
    
}


-(void)textDidChange{ 
    
//    CGSize sizeThatFits = [self.textView sizeThatFits:self.textView.contentSize];
//    CGSize sizeThatFits = [self.textView sizeThatFits:CGSizeZero];
    CGSize sizeThatFits = [self.textView sizeThatFits:CGSizeMake(self.textView.frame.size.width, 500)];
    
    NSLog(@"sizeThatFits: %@", NSStringFromCGSize(sizeThatFits));
    self.textView.frame = CGRectMake( self.textView.frame.origin.x,  self.textView.frame.origin.y,  self.textView.frame.size.width, sizeThatFits.height);
    
}
@end

在使用UITextView时,经过测试发现 - (CGSize)sizeThatFits:(CGSize)size; 计算出来的Size 和传入的参数没有直接关系(随便传), 方法内部最终都会根据视图内容来的出最合适的尺寸.

在这里插入图片描述
这实际上又从另一方面验证了官方的解释。

  • - (void)sizeToFit; 主要用来根据内容直接调整视图的尺寸
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值