我有一个UIView,我需要在drawRect中绘制文本:
- (void)drawRect:(CGRect)rect {
...
[@"some text" drawAtPoint:somePoint withFont:someFont];
...
}
因为文本需要特殊格式,所以我不能只使用UILabel。
在我旋转设备之前它看起来很好。然后我的自定义UIView的大小发生了变化(在父视图的layoutSubviews
方法中),文本在一个方向上被拉伸而在另一个方向上被压缩。
当我用UILabel替换视图时,即使视图的边界发生变化,文本也总是很好看。
如何让我的观点表现出与UILabel相同的行为?
我已经研究了一些事情,但尚未取得成功:
也许我没有正确地做这些事情。还有其他人遇到过这个吗?
更新:正如James Huddleston的回答中所建议的,我将视图的contentMode
属性设置为UIViewContentModeRedraw
,这让我在那里的一部分。现在,动画结束时文本显示正确。但是,在动画开始时,文本会被压缩/拉伸以适应最终尺寸,然后在动画过程中得到不合格/未拉伸。 UILabel不是这种情况。
答案 0 :(得分:5)
尝试将视图的contentMode
属性设置为UIViewContentModeRedraw
。
答案 1 :(得分:2)
这似乎工作正常:
self.contentMode = UIViewContentModeRedraw;
self.contentStretch = CGRectMake(1, 1, 0.5, 0.5);
然后确保右下角的像素是背景颜色。为此,我在视图的内容周围放置了一个填充像素。似乎UILabel没有一个像素边界限制,所以它必须做一些不同的事情。但据我所知,这具有同样的效果。
答案 2 :(得分:1)
Kevin Ballard创建了一些名为FontLabel的源代码。 (code.google.com)
关于这个的好处,它是UILabel的子类,你可以使用自己的Font;)
//编辑:好的,告诉我将更新我的答案以推荐子类化UILabel "to get all the UILabel goodness"
^^
答案 3 :(得分:1)
使用UIWebView
听起来有点矫枉过正,但似乎推荐的方式来获得比UILabel更复杂的格式化文本。