首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何获得一个UIView,当边界改变时,它显示文本的行为像UILabel一样?

如何获得一个UIView,当边界改变时,它显示文本的行为像UILabel一样?
EN

Stack Overflow用户
提问于 2010-10-16 16:26:43
回答 4查看 1.2K关注 0票数 3

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

代码语言:javascript
代码运行次数:0
运行
复制
- (void)drawRect:(CGRect)rect {
    ...
    [@"some text" drawAtPoint:somePoint withFont:someFont];
    ...
}

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

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

当我用UILabel替换视图时,文本看起来总是很棒,即使视图的界限发生了变化。

如何才能让我的观点显示出与UILabel相同的行为?

有些事情我已经研究过了,但还没有成功:

  • 将视图层的needsDisplayOnBoundsChange设置为YES。
  • 将视图的contentStretch设置为CGRectZero。
  • 在我的视图中调用setNeedsDisplay‘s layoutSubviews。

也许我做得不对。还有其他人碰到这个吗?

更新:,正如James的答案中所建议的,我将视图的contentMode属性设置为UIViewContentModeRedraw,这使我成为了其中的一部分。在动画结束时,文本现在看起来是正确的。但是,在动画开始时,文本会被压缩/拉伸以适应最终尺寸,然后在动画过程中得到未压缩/未拉伸的文本。UILabel的情况并非如此。

EN

回答 4

Stack Overflow用户

发布于 2010-10-16 16:56:52

尝试将视图的contentMode属性设置为UIViewContentModeRedraw

票数 5
EN

Stack Overflow用户

发布于 2011-01-03 21:14:53

这似乎是可行的:

代码语言:javascript
代码运行次数:0
运行
复制
self.contentMode = UIViewContentModeRedraw;
self.contentStretch = CGRectMake(1, 1, 0.5, 0.5);

然后确保右下角像素为背景色.为此,我在视图的内容周围放置了一个像素的填充。UILabel似乎没有一个像素的边界限制,所以它一定在做一些不同的事情。但据我所知,这也有同样的效果。

票数 2
EN

Stack Overflow用户

发布于 2011-01-04 11:17:09

Kevin创建了一些名为FontLabel的源代码。(code.google.com)

这方面的好处是,它对UILabel进行了子类,您可以使用自己的字体;)

//编辑:好的,我将更新我的答案以推荐子类UILabel "to get all the UILabel goodness" ^^

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3949711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档