我正在使用自动布局和自定义视图处理我的第一个项目。我的问题是:
我在Interface Builder中创建了我的自定义视图,然后添加了约束以在需要时拉伸视图,这是我想要的方式,但是,请考虑我的自定义视图类中的以下代码片段 -
// MyCustomView
-(id)initWithCoder:(NSCoder*)decoder
{
self = [super initWithCoder:decoder];
if(self != nil)
{
CGFloat layerWidth = self.bounds.size.width;
CGFloat layerHeight = self.bounds.size.height;
}
return self;
}
此代码返回IB中设置的大小。我的绘图代码依赖于新的宽度和高度(如果视图已被拉伸)但我不知道如何检索它们。
答案 0 :(得分:1)
首先,该代码非常愚蠢,因为您正在创建变量layerWidth
和layerHeight
并抛弃它们,这是毫无意义的。
其次,self.bounds.size
始终是视图的宽度和高度。但是,在initWithCoder:
中询问这一点是没有意义的,在视图放入界面之前很久就会发生(正如您所见),在自动布局发生之前甚至更长时间。如果您的绘图代码依赖于边界大小,则在绘制时检索边界大小。如果您需要再次绘制,因为视图已更改大小,并且如果这不是全部发生,则实现layoutSubviews
以告知视图需要再次绘制。