我有一个自定义UIView fooView
,我使用drawRect
方法覆盖了initWithFrame
方法。
我还有一个自定义UIView barView
,其中包含fooView
。
barView
应该从fooView
获得它的高度,因为fooView
正在绘制自定义内容。
我的问题是每当我检查fooView
的{{1}}或frame
属性时,它都保持不变。尽管我可以清楚地看到它超出bounds
所指示的初始高度。
这让我相信,因为我已经覆盖了initWithFrame
方法,现在我有责任更新drawRect
的框架。
我应该这样做吗? 我该怎么做? 什么是最佳做法?
编辑:添加代码
fooView
- (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) [self setupWithMessage:nil];
return self;
}
只计算文本在约束宽度内所需的尺寸(主要是高度)。
setupWithMessage
答案 0 :(得分:1)
方法drawInRect:(CGRect)rect
为您提供一个不大于您的视图框架的矩形。
因此,如果您绘制的矩形高于给定rect
的矩形 - 您的绘图将被裁剪。
所以你应该做的步骤:
fooView
框架。[fooView setNeedsDisplay]
。drawInRect:
方法,因此您可以专注于绘图。如果您的fooView
主要任务是从barView
中提取给定文字,我建议您在@property (nonatomic) NSString *textToDraw;
课程中创建fooView
并覆盖设置者您将按照上述步骤进行操作。
编辑:
正如我所见,您为此目的创建了setupWithText:
方法。因此,您需要计算所有维度,设置框架self.frame = (CGRect){previousX, previousY, newWidth, newHeight}
并调用[self setNeedsDisplay];