使字体与UILabel一起增长(通过自动布局调整大小) - 如何在Interface Builder中执行此操作?

Ale*_*ber 24 interface-builder uilabel ios sizetofit

一个简单的iPhone应用程序中,UIView通过viewDidLoad中的以下代码显示一个字母图块(自定义图像和2个标签):

应用截图

DraggedTile *tile = [[[NSBundle mainBundle] loadNibNamed:@"DraggedTile"
                                                   owner:self
                                                 options:nil] firstObject];
tile.frame = CGRectMake(10 + arc4random_uniform(100),
                        10 + arc4random_uniform(100),
                        kWidth,
                        kHeight);
[self.view addSubview:tile];
Run Code Online (Sandbox Code Playgroud)

这工作没问题,但我想让字母瓷砖增长 - 当我提供更大的宽度和高度参数CGRectMake.

所以在Xcode 5.1 Interface Builder中我打开DraggedTile.xib并启用"Auto Layout".

然后为我imageletter我添加约束到父,左,上,右,下边缘.

对于letter标签,我还将"Lines"设置为0,将"Content Compression Resistance Priority"设置为1000(此处为全屏1全屏2):

Xcode截图

Xcode截图

然后我修改代码以使用更大的宽度和高度:

tile.frame = CGRectMake(10 + arc4random_uniform(100),
                        10 + arc4random_uniform(100),
                        2 * kWidth,
                        2 * kHeight);
Run Code Online (Sandbox Code Playgroud)

结果如下:

应用截图

背景imageletter标签似乎都按预期增长.

但是标签的字体大小没有增长.

我四处寻找,我认为我需要类似的东西tile.letter.adjustsFontSizeToFitWidth = YES.但与此同时我无法使用"自动布局"...

所以我的问题是,如果"Interface Builder"中有任何选项可以使字体大小增加吗?

更新:

我已经尝试过ismailgulek的建议,在Interface Builder和代码 中将字体大小设置为200,tile.letter.adjustsFontSizeToFitWidth = YES看起来很有前景(这里是全屏):

Xcode截图

但我现在遇到的问题是我已将40px设置为letter.bottomInterface Builder中的约束.但是,如果我需要更大的瓷砖框架怎么办?有没有办法在该约束中使用百分比而不是绝对像素值?

另一个问题是,是否可以adjustsFontSizeToFitWidth在Interface Builder中设置某个位置,或者我是否必须使用源代码?我尝试在"用户定义的运行时属性"中添加一个键 - 但随后应用程序在运行时崩溃:

Xcode截图

小智 27

adjustsFontSizeToFitWidthUILabel不会长大字体大小的属性,它只是根据文档减少:通常,标签文本是用font你在font属性中指定的方式绘制的.YES但是,如果将此属性设置为,并且text属性中的文本超出了标签的边界矩形,则接收器将开始缩小字体大小,直到字符串适合或达到最小字体大小.

但是如果你将字体大小设置得足够大(比如200)并设置adjustsFontSizeToFitWidthYES,我认为你会得到有趣的有价值的结果.

并且不要忘记设置BaselineAlign Centers,否则您的文本可能无法正常显示.

请告知我们您的结果.

  • 这就是我一直在做的事情,它在较小的屏幕上创建了太多空间.但是,我完全跳过了"对齐中心",正如你所描述的那样,这对我的问题有所帮助,因为我只是用标题来做这件事.谢谢! (2认同)

ish*_*hak 14

对于那些来到这里的人来说,需要一个简单的解决方案(经过数小时的调查):

问题示例:如果您使用自动布局并将UILabel高度设置为与屏幕高度成比例,则您将获得一个低于iPhone(横向)和iPad高的帧.如何自动调整字体高度?

解决方案:在Interface Builder中,

  1. "自动收缩"设置为"最小字体大小"并设置大小(它会影响太宽的文本,但我们的解决方案需要).
  2. "Lines"设置为0,并使字体大小高于您在iPad中获得的帧.

这将导致字体自动增加到当前高度.