cell重写layoutSubviews的问题

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



你可能感兴趣的:(iOS,iOS7)