我在我的应用程序中添加了一个WebView,并使用以下代码将页面加载到其中:
-(void)awakeFromNib{
NSString *resourcesPath = [[NSBundle mainBundle] resourcePath];
NSString *htmlPath = [resourcesPath stringByAppendingString:@"/calendarHTML/test.html"];
[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:htmlPath]]];
}
但是,当我运行应用程序时,我收到以下错误:
Layout still needs update after calling -[WebHTMLView layout].
WebHTMLView or one of its superclasses may have overridden
-layout without calling super. Or, something may have dirtied
layout in the middle of updating it. Both are programming errors in
Cocoa Autolayout. The former is pretty likely to arise if some
pre-Cocoa Autolayout class had a method called layout, but it should be fixed.!
是什么导致了这个问题?
答案 0 :(得分:12)
这是因为包含您放置WebView的窗口的nib正在使用Lion中引入的新Auto Layout功能。
当nib文件启用了自动布局时,窗口将在窗口中的所有-layout
个对象上调用NSView
方法。
这会导致WebView
出现问题,因为在将方法添加到Lion中的-layout
API之前,它有一个名为NSView
的方法,WebView
的{ {1}}方法无法理解自动布局。
目前最好的修复方法是使用旧的自动调整遮罩方法在窗口中布局视图。由于Xcode现在创建启用了autolayout的nib文件,因此您需要自己禁用它。
您可以在文件检查器中为nib文件执行此操作,方法是禁用layout
复选框。
执行此操作后,您需要确保在视图检查器的“大小”选项卡中,笔尖中的所有视图都具有正确的自动调整大小设置。
答案 1 :(得分:3)
请注意,您可以安全地忽略WebViews的日志消息。
答案 2 :(得分:0)
我不确定WebView
的情况但是如果您正在使用任何自定义类(如UILabel
的子类)并且您正在使用该方法:
- (void)updateConstraints
{
}
然后肯定会崩溃你的应用程序。最佳解决方案是删除此方法并在' awakeFromNib
'中写下您所需的更改。方法。希望这可以帮助那些在自定义课程中遇到此崩溃的人。