gpt4 book ai didi

ios - 如何/如何手动更改自定义 UIView 的框架?

转载 作者:行者123 更新时间:2023-11-29 03:14:59 27 4
gpt4 key购买 nike

我有一个自定义 UIView fooView,其中我用 initWithFrame 方法覆盖了 drawRect 方法。

我还有一个自定义的 UIView barView,它包含 fooView

barView 应该从 fooView 获取它的高度,因为 fooView 正在绘制自定义内容。

我的问题是每次检查 fooViewframebounds 属性时,它都保持不变。尽管我可以清楚地看到它超出了 initWithFrame 指定的初始高度。

这让我相信也许因为我已经覆盖了 drawRect 方法,现在我有责任更新 fooView 的框架。

我应该这样做吗?我该怎么做?最佳做法是什么?


编辑:添加代码

- (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) [self setupWithMessage:nil];
return self;
}

setupWithMessage 仅计算文本适合受限宽度所需的尺寸(主要是高度)。

- (void)drawRect:(CGRect)rect{
[super drawRect:rect];
// a whole bunch of drawing logic, but basically draws a message bubble
// based on the size of the text (The text dynamically changes), and then
// draws the text so if there is a lot of text, the calculated height of
// what it takes to draw the text can easily be larger than the size
// originally passed in during initialization
}

最佳答案

方法drawInRect:(CGRect)rect为您提供一个不大于您的 View 框架的矩形。

因此,如果您在高于给定矩形的矩形中绘制 - 您的绘图将被剪裁。

所以您应该执行的步骤:

  • 计算所有尺寸并设置您的fooView框架。
  • 之后您应该调用[fooView setNeedsDisplay]
  • 它将使用新框架调用您的 drawInRect: 方法,以便您可以专注于绘图。

如果您的fooView 主要任务是从barView 绘制给定 文本我建议您创建@property (nonatomic) NSString *textToDraw;fooView 类中并覆盖 setter,您将在其中执行上述步骤。

编辑:正如我所看到的,您为此目的创建了一个 setupWithText: 方法。所以你需要计算所有尺寸,设置框架 self.frame = (CGRect){previousX, previousY, newWidth, newHeight} 并调用 [self setNeedsDisplay];

关于ios - 如何/如何手动更改自定义 UIView 的框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21797271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com