我在iOS 5/6应用程序中使用此代码已经很长时间了。它位于viewWillAppear:
下并操纵UILabel
高度,可以根据需要容纳更多文本(并将其下方的其他标签向下推)。问题是,对于iOS 7,它似乎不再起作用了。文本根本不包裹到第二行。这是代码:
self.titleLabel.text = titleString;
self.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.titleLabel.numberOfLines = 0;
// Determine what the size of the title label should be
CGSize maximumLabelSize = CGSizeMake(163,66);
CGSize expectedLabelSize = [titleString sizeWithFont:self.titleLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:self.titleLabel.lineBreakMode];
// Adjust the the new height of the title label.
CGRect newFrame = self.titleLabel.frame;
newFrame.size.height = expectedLabelSize.height;
self.titleLabel.frame = newFrame;
NSLog(@"Title Height: %f", self.titleLabel.frame.size.height);
这里有更多信息。此UILabel
位于UITableView
的标题视图中。它使用Interface Builder和标签IBOutlet
设计。 iOS 6和iOS 7项目中UILabel
的属性相同。
以下是Xcode 4针对iOS 6运行的情况:
这是Xcode 5与iOS 7(你可以看到,文字没有包装):
有人有什么想法吗?
答案 0 :(得分:1)
sizeWithFont
也被boundingRectWithSize
替换:
GSize maximumLabelSize = CGSizeMake(163,66);
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:titleString attributes:@{NSFontAttributeName: self.titleLabel.font}];
CGRect rect = [attributedText boundingRectWithSize:maximumLabelSize
options:NSStringDrawingUsesLineFragmentOrigin
context:nil];
CGSize expectedLabelSize = rect.size;
答案 1 :(得分:0)
确保您的UILabel是显示文本所需的正确高度。
然后确保您没有更改UILabel上的numberOfLines。
如果您希望UILabel使用所需数量的行,则将行数设置为0
myLabel.numberOfLines = 0;
答案 2 :(得分:0)
虽然您正在打印尺寸,但我猜如果它不同,您会说出来。可能发生的是由于某些约束或调整大小选项而在显示时更改的大小。您可以做的一件事就是测试是否存在问题是在标签上设置backgroundColor,以查看它是否实际上是垂直的正确尺寸。还为标题视图设置backgroundColor。这通常是我做的事情,以确保事情的大小正确。
此外,iOS7上不推荐使用sizeWithFont:方法。
你可以使用这个替代品来替换我在这里得到的答案: