如何调整已旋转的 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代码?

以编程方式创建的 UILabel 未在旋转时调整大小

IOS UILabe及UIFont用法总结

如何调整 UIView 的大小以获取大量 UILabel 并调整 UILabel 的大小以适合文本?

在旋转时更改 UITableViewCell 中的文本对齐方式

如何在 iOS 中根据 dp(不是点数)设置 UILabel 字体大小,就像只有自动布局的 android