如何调整已旋转的 UILabel 的大小
Posted
技术标签:
【中文标题】如何调整已旋转的 UILabel 的大小【英文标题】:How to size UILabel that has been rotated 【发布时间】:2013-06-14 05:59:21 【问题描述】:在 3D 空间中旋转 UILabel
后,它会被截断。我不知道为什么标签在旋转后会截断文本,因为最初,文本很合适。
之前
之后
这是我的轮换代码。注释掉代码时(sizeToFit
除外),一切正常。
CALayer *layer = label.layer;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;
[label sizeToFit];
我可以在调用sizeToFit
后调整标签框架的大小,但我无法以编程方式确定正确的数字。在下面的代码中,我确定了文本的宽度并调整了标签框架的大小,但文本仍然被截断。
CGRect frame = label.frame;
frame.size.width = [label.text sizeWithFont:label.font].width;
label.frame = frame;
【问题讨论】:
我敢打赌,应用到变换的透视图会截断它。完成图层转换后重置它。 @CodaFi 我没有关注。你能解释一下细节吗?谢谢。 您看到如何应用 m34 透视变换了吗?完成图层转换后重置它。 @CodaFi 嗯...这没有做任何事情。 实际上,我这么建议是愚蠢的,因为我应该看看你应用的角度。由于转换影响对象边界的方式,您都会以任何一种方式截断。我希望我在 Photoshop 方面做得更好,这样我就可以绘制一张图像,向您展示它是如何以平面方式布置的。只要不说你做什么就够了,除了操纵它的界限,会有所作为。 【参考方案1】:由于 45 度 X 轴变换,该标签的大约一半现在在 Z 轴的负值部分被遮挡。对象的框架也被有效地切成两半,这迫使标签截断其文本。如果增加对象的框架,他们很快就会发现它没有任何效果。仅仅因为相对于它的超级视图的框架增加了,并不意味着标签变换坐标中的边界矩形已经更新。为此,我们分配了边界。要解决截断问题,请分配一个宽度约为当前标签边界宽度两倍的边界,这会强制渲染引擎将标签的“负 z 轴”部分视为可绘制。
(抱歉缺少图形,因为它真的很有帮助)
【讨论】:
【参考方案2】:按比例增加It's Frame。它应该工作
【讨论】:
如何确定缩放框架的比例? 基本上,当您旋转 90 角时,您的高度和宽度会在框架中互换。我不知道你旋转它的方式和角度。 缩放框架是没有用的,因为它所做的只是将图层进一步推到负 z 坐标中。以上是关于如何调整已旋转的 UILabel 的大小的主要内容,如果未能解决你的问题,请参考以下文章
字体更改时自动uiLabel和uiTableViewCell调整大小的iphone代码?
如何调整 UIView 的大小以获取大量 UILabel 并调整 UILabel 的大小以适合文本?