iphone - 如何获得一个 UIView,它在边界更改时显示文本,使其表现得像 UILabel 一样?

标签 iphone uiview uilabel

我有一个 UIView,我需要在 drawRect 中绘制文本:

- (void)drawRect:(CGRect)rect {
    ...
    [@"some text" drawAtPoint:somePoint withFont:someFont];
    ...
}

因为文本需要特殊格式,所以我不能只使用 UILabel。

在我旋转设备之前,它看起来很好。然后,我的自定义 UIView 的大小发生变化(在父 View 的 layoutSubviews 方法中),文本在一个方向上被拉伸(stretch),在另一个方向上被压扁。

当我用 UILabel 替换 View 时,文本看起来总是很棒,即使 View 的边界发生变化也是如此。

如何让我的 View 表现出与 UILabel 相同的行为?

我研究过一些事情,但尚未取得成功:

  • 将 View 层的needsDisplayOnBoundsChange 设置为YES。
  • 将 View 的 contentStretch 设置为 CGRectZero。
  • 在我的 View 的layoutSubviews中调用setNeedsDisplay。

也许我没有做对其中一件事情。还有其他人遇到过这种情况吗?

更新:按照 James Huddleston 的回答中的建议,我将 View 的 contentMode 属性设置为 UIViewContentModeRedraw,这让我成为了就在那里。现在,动画结束时的文本显示正确。但是,在动画开始时,文本会被压扁/拉伸(stretch)以适合最终尺寸,然后在动画过程中不再压扁/拉伸(stretch)。 UILabel 的情况并非如此。

最佳答案

尝试将 View 的 contentMode 属性设置为 UIViewContentModeRedraw

关于iphone - 如何获得一个 UIView,它在边界更改时显示文本,使其表现得像 UILabel 一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3949711/

相关文章:

ios - Swift 向下转型和协议(protocol)变量

ios - 如何使 Collection View 中的不同单元格转到 Swift 中的不同 View Controller

iPhone ScrollView 和 Picker 问题

iphone - 如何将 30000 x 6000 的图像平铺到 480 x 320 的屏幕上?

ios - 在 iOS 中正确设置 UILabel 的背景图片

ios - 创建类似于邮件应用程序菜单的 iPhone 弹出菜单

ios - 我在 View Controller 中显示了一个 UIView,如何检测用户何时在该 View 之外点击?

ios - 复制CALayer

ios - 如何向多行 UILabel 添加缩进?

iphone - UIlabel 文本的样式与“设置”面板中的字体相同