关于layoutSubviews方法何时使用的总结

本文深入探讨了在自定义Button时遇到的layoutSubviews方法调用问题,特别是使用sizeToFit自适应方法且未在初始化时设置frame的情况。通过分析不同方法的触发时机,揭示了布局更新的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在自定义button时,遇到了关于layoutSubviews方法调用的问题,由于使用的是sizeTofit自适应的方法,所以初始化时并没有给按钮设置frame,,只是在layout方法里改变了titleLable和imageView的位置,按钮却能正常显示,就想到什么时候走了layout方法

- (void)layoutSubviews{

   [super layoutSubviews];
    NSLog(@"layout1");
    self.backgroundColor = [UIColor redColor];
   self.titleLabel.frame =    CGRectMake(self.imageView.frame.origin.x, self.titleLabel.frame.origin.y, self.titleLabel.frame.size.width, self.titleLabel.frame.size.height);

    self.imageView.frame = CGRectMake(CGRectGetMaxX(self.titleLabel.frame), self.imageView.frame.origin.y, self.imageView.frame.size.width, self.imageView.frame.size.height);
}
- (void)setTitle:(NSString *)title forState:(UIControlState)state{

    [super setTitle:title forState:state];
    NSLog(@"settitle");
    [self sizeToFit];
}

- (void)setImage:(UIImage *)image forState:(UIControlState)state{
    NSLog(@"setimage");
    [super setImage:image forState:state];
    [self sizeToFit];
}
  • 何时使用layout
1.init方法不会触发
2.改变frame大小时会触发layoutSubviews方法
3.addSubview会触发layoutSubviews
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值