为什么我的UILabel框架代码在iOS 6中工作但在iOS 7中不工作?

时间:2014-02-11 17:30:20

标签: ios objective-c xcode cocoa-touch uitableview

我在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运行的情况:

enter image description here

这是Xcode 5与iOS 7(你可以看到,文字没有包装):

enter image description here

有人有什么想法吗?

enter image description here

3 个答案:

答案 0 :(得分:1)

像@Jack吴说的那样,尝试给标签一些像素。 iOS 7 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:方法。

你可以使用这个替代品来替换我在这里得到的答案:

UITableViewCell with UITextView height in iOS 7?