如何/我手动更改自定义UIView框架?

时间:2014-02-15 12:03:07

标签: ios objective-c uiview frame

我有一个自定义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

1 个答案:

答案 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];