我有一个UIView,需要用drawRect绘制文本:
- (void)drawRect:(CGRect)rect {
...
[@"some text" drawAtPoint:somePoint withFont:someFont];
...
}
因为文本需要特殊的格式设置,所以我不能只使用UILabel。
它看起来很好直到我旋转设备。然后,我的自定义UIView的大小发生变化(在父视图的layoutSubviews
方法中),文本在一个方向拉伸,另一个方向被压缩。
当我用UILabel替换视图时,文本看起来总是很棒,即使视图的界限发生了变化。
如何才能让我的观点显示出与UILabel相同的行为?
有些事情我已经研究过了,但还没有成功:
也许我做得不对。还有其他人碰到这个吗?
更新:,正如James的答案中所建议的,我将视图的contentMode
属性设置为UIViewContentModeRedraw
,这使我成为了其中的一部分。在动画结束时,文本现在看起来是正确的。但是,在动画开始时,文本会被压缩/拉伸以适应最终尺寸,然后在动画过程中得到未压缩/未拉伸的文本。UILabel的情况并非如此。
发布于 2010-10-16 16:56:52
尝试将视图的contentMode
属性设置为UIViewContentModeRedraw
。
发布于 2011-01-03 21:14:53
这似乎是可行的:
self.contentMode = UIViewContentModeRedraw;
self.contentStretch = CGRectMake(1, 1, 0.5, 0.5);
然后确保右下角像素为背景色.为此,我在视图的内容周围放置了一个像素的填充。UILabel似乎没有一个像素的边界限制,所以它一定在做一些不同的事情。但据我所知,这也有同样的效果。
发布于 2011-01-04 11:17:09
Kevin创建了一些名为FontLabel的源代码。(code.google.com)
这方面的好处是,它对UILabel进行了子类,您可以使用自己的字体;)
//编辑:好的,我将更新我的答案以推荐子类UILabel "to get all the UILabel goodness"
^^
https://stackoverflow.com/questions/3949711
复制相似问题