/** * 要修改、设置子控件的frame时,都要在layoutSubviews方法中进行。 这个方法专门用来布局子控件,一般在这里设置子控件的frame,即在该方法中对子控件进行布局。当控件本身的尺寸发生改变的时候、当控件即将被展现出来的时候,系统会自动调 用这个方法 。一旦父控件的frame发生改变,就会立刻调用这个方法,来对子控件进行重新布局以适配父控件frame的改变。
-(void)layoutSubviews{ [super layoutSubviews];}
但如果是想用Masonry对UITbableViewCell中的子控件布局的话,就不能不能再layoutSubviews方法中进行对其进行布局,否则会报如下错误:
couldn't find a common superview for<UIImageView:> and<UITableViewCellContentView:>即找不到这两个空间的父视图。我试着在UITableViewCellContentView中先添加一个UIView,具体代码如下:
UIView *view = [[UIView alloc] initWithFrame:self.contentView.bounds];
[self.contentView addSubview:self.view];
然后把自己想要往UITbableViewCell中添加的所有子控件,例如UIImageView等,都添加到这个UIView中,原先是添加到UITableViewCellContentView中的,这样UIImageView等子控件和UIView就都在UITableViewCellContentView中了,但这样设置之后报错,内容为:
couldn't find a common superview for <UIImageView:> and < UITableViewCellContentView:>。
上网查了很久也没找到解决的办法,最后把约束设置的代码放在initWithStyle:reuseIdentifier方法中,在一初始化的时候就设置其自控件的相关约束,这样就编译通过了。