iOS高质量博客IOS网友们的篇章

修改使用xib自定义cell的子控件的frame

2015-08-02  本文已影响4073人  CoderAO

最近发现了一个比较奇怪的现象:使用xib自定义UITableViewCell时添加了一些子控件进去(并没有为它们添加约束),却发现在代码里面无论如何都没办法修改这些子控件的frame.

如果修改frame的代码是放在cell的layoutSubviews方法中,那么会出现一开始的时候frame没有改变,当cell滚动出屏幕或者在表视图reloadData之后frame才发生改变的情况.

这个问题的解决方法有两个:

因为xib文件在被创建的时候会自动将AutoLayout勾选,所以即使没有为子控件添加约束,系统也会默默地将子控件当前的位置和尺寸信息转成约束,导致代码里面无法修改其frame.禁用掉AutoLayout后就没有"约束"这一说法了.

如:

- (void)drawRect:(CGRect)rect {
    self.yellowView.frame = CGRectMake(50, 0, 20, 20);
}

drawRect:方法通常在第一次显示到屏幕上的时候调用.

总结:

虽说上面两个方法可以解决出现的问题,但是并不推荐使用.

因为AutoLayout早已是必然趋势,不使用会遭淘汰.而drawRect:方法的主要作用是绘制,让这个方法承受太多总觉得不妥,也不建议在这个方法里面设置其他的东西.

如果确实有修改某个子控件frame的需要

你可以尝试:

上一篇 下一篇

猜你喜欢

热点阅读