我用Xcode6 beta6打开了一个现有的iOS项目,Xcode列出了以下对Storyboard和Xib文件的警告:

自动首选最大布局宽度在iOS版本中不可用 8.0以前版本

我尝试通过设置宽度来解决警告,如下所示:

然而,这并没有消除警告。如何去除?


当前回答

解决方法很简单

只需要启用iOS 8及更高版本的构建即可

其他回答

我通过选择W / H选项中的原始布局来让它工作。故事板正在正常工作,错误已经消失。

还要确保你开发的是iOS 8.0。从项目的一般设置中检查。

这就是你应该按的地方。

更新3: 如果部署目标设置为7.1,那么numberolines设置为1以外的任何值的标签也可能触发此警告。这是完全可复制的与新的单视图项目。

复制步骤:

创建一个新的单视图objective-c项目 将部署目标设置为7.1 打开项目的故事板 将标签放到所提供的视图控制器上 将该标签的numberolines设置为2。 编译

我已经提交了以下雷达: rdar: / /问题/ 18700567

更新2: 不幸的是,在Xcode 6的发行版中又出现了这种情况。请注意,在大多数情况下,您可以手动编辑故事板/xib来修复这个问题。以下是查尔斯·a的评论:

It's worth mentioning that you can pretty easily accidentally introduce this warning, and the warning itself doesn't help in finding the label that is the culprit. This is unfortunate in a complex storyboard. You can open the storyboard as a source file and search with the regex <label(?!.*preferredMaxLayoutWidth) to find labels that omit a preferredMaxLayoutWidth attribute/value. If you add in preferredMaxLayoutWidth="0" on such lines, it is the same as marking explicit and setting the value 0.

更新1: 这个错误现在已经在Xcode 6 GM中修复。

原来的答案 这是Xcode6-Beta6和XCode6-Beta7中的一个bug,现在可以安全地忽略。

一位苹果工程师在苹果开发者论坛上对这个漏洞是这样说的:

Preferred max layout width is an auto layout property on UILabel that allows it to automatically grow vertically to fit its content. Versions of Xcode prior to 6.0 would set preferredMaxLayoutWidth for multiline labels to the current bounds size at design time. You would need to manually update preferredMaxLayoutWidth at runtime if your horizontal layout changed. iOS 8 added support for automatically computing preferredMaxLayoutWidth at runtime, which makes creating multiline labels even easier. This setting is not backwards compatible with iOS 7. To support both iOS 7 and iOS 8, Xcode 6 allows you to pick either "Automatic" or "Explicit" for preferredMaxLayoutWidth in the size inspector. You should: Pick "Automatic" if targeting iOS 8 for the best experience. Pick "Explicit" if targeting < iOS 8. You can then enter the value of preferredMaxLayoutWidth you would like set. Enabling "Explicit" defaults to the current bounds size at the time you checked the box. The warning will appear if (1) you're using auto layout, (2) "Automatic" is set for a multiline label [you can check this in the size inspector for the label], and (3) your deployment target < iOS 8. It seems the bug is that this warning appears for non-autolayout documents. If you are seeing this warning and not using auto layout you can ignore the warning.

或者,你可以通过使用故事板或xib上的文件检查器来解决这个问题,并将“用于”更改为“用于iOS 8.0及以后版本的构建”

现在我的Xcode版本是6.1。但我也收到了警告。这让我很恼火。经过一遍又一遍的搜索。我找到了解决办法。

原因:你必须在你的故事板中设置你的UILabel Lines > 1。

解决方案:在Storyboard中将UILabel Lines属性设置为1。重启Xcode。这对我有用,希望它能帮助更多的人。

如果你确实需要显示你的单词超过一行。你应该在代码里写。

//the words will show in UILabel
NSString *testString = @"Today I wanna set the line to multiple lines. bla bla ......  Today I wanna set the line to multiple lines. bla bla ......"
[self.UserNameLabel setNumberOfLines:0];
self.UserNameLabel.lineBreakMode = NSLineBreakByWordWrapping;
UIFont *font = [UIFont systemFontOfSize:12];
//Here I set the Label max width to 200, height to 60
CGSize size = CGSizeMake(200, 60);
CGRect labelRect = [testString boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName] context:nil];
self.UserNameLabel.frame = CGRectMake(self.UserNameLabel.frame.origin.x, self.UserNameLabel.frame.origin.y, labelRect.size.width, labelRect.size.height);
self.UserNameLabel.text = testString;

您可以在不将故事板作为源打开的情况下修复此问题。 如果numberolines !=1并且部署目标< 8.0,UILabels将触发此警告

如何找到它?

转到Issue Navigator (CMD+8)并选择带有警告的最新构建 找到警告(s)(搜索“自动首选最大布局”)并按下右边的展开按钮 找到UILabel的对象ID 打开Storyboard并搜索(CMD+f)对象。它将选择并突出显示UILabel 根据其他人的建议,设置Preferred Width = 0 "Explicit"

解决方法很简单

只需要启用iOS 8及更高版本的构建即可