layoutSubviews何时调用的问题,这个方法是当你需要在调整subview的大小的时候需要重写(我这个翻译不严谨,以下是原文:You should override this method only if the autoresizing behaviors of the subviews do not offer the behavior you want.),但有时候经常指望它被调用的时候没被调用,不希望它被调用的时候被调用了,搞的很上火。根据国外社区一个人帖子,做了总结性翻译。
layoutSubviews在以下情况下会被调用:
1、init初始化不会触发layoutSubviews
2、addSubview会触发layoutSubviews
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
4、滚动一个UIScrollView会触发layoutSubviews
5、旋转Screen会触发父UIView上的layoutSubviews事件
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
在使用uitableViewCell时cell.imageView的大小是只读属性,不能改变大小 ,这时只能重写layoutSubviews方法,就能满足要求了。在之前写过一篇关于固定cell.imageView.image大小的文章,当时写的时候在xib里自定义cell时是不需要重写layoutSubviews方法的。现在在IOS7中这样来做不可以了,图片变小了,和之前有所变化。现在也需要重写layoutSubviews方法。
例子如下:
@interface MeCell : UITableViewCell
@property (retain, nonatomic) IBOutlet UIImageView *m_headImg;//头像
@property (retain, nonatomic) IBOutlet UILabel *m_labelText;//左侧文本
@property (retain, nonatomic) IBOutlet UILabel *m_labDetail;//详情
@end
@implementation MeCell
@synthesize m_headImg,m_labelText,m_labDetail;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
}
return self;
}
-(void)layoutSubviews
{
self.imageView.frame =CGRectMake(0.0f, 3.0f, 37.0f, 37.0f);
}
-(void)dealloc
{
[m_headImg release];
[m_labelText release];
[m_labDetail release];
[super dealloc];
}
@end
cell重写layoutSubviews的问题,布布扣,bubuko.com
原文:http://blog.csdn.net/quanqinyang/article/details/22827815