我有一个与Xcode 5(iOS 6和iOS 7)完美运行的通用iOS项目。 iPad和iPad使用不同的故事板iPhone。
当我使用Xcode 6 GM运行它时,它可以与iPhone完美配合,但不适用于iPad。我调试了我发现UISplitViewController中的viewDidLayoutSubviews存在问题。例如:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
NSLog(@"run");
// some config with frame of child controllers
}
它连续不断地停止。
任何人都有同样的问题?请帮忙:(
谢谢!
答案 0 :(得分:4)
我看到的是每次在视图中更改元素的布局时,它会调用以下方法:
viewWillLayoutSubviews;
viewDidLayoutSubviews;
如果您将某些内容更改为最后一个,则会再次调用它;
答案 1 :(得分:3)
子控制器的viewDidLayoutSubviews覆盖中的代码本身正在修改视图的子视图,因此触发viewDidLayoutSubviews再次,再次,再次调用。
为防止这种情况,请尝试向UISplitViewController添加BOOL属性,以控制子控制器布局代码的执行。
@interface UISplitViewController()
...
@property (nonatomic) BOOL subViewLayoutCalled;
...
@end
然后在你的viewDidLayoutSubviews中......
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
NSLog(@"run");
if (!self.subViewLayoutCalled) {
self.subViewLayoutCalled = YES;
// some config with frame of child controllers
}
}
值得一试。
我最近遇到了同样的问题。
答案 2 :(得分:2)
我有同样的问题 - 用它来调整UISplitViewCtrl中的主/细节。
要更改大小/详细信息,请在ios8中尝试此新参数,例如viewDidLoad:
self.minimumPrimaryColumnWidth = 500;
self.maximumPrimaryColumnWidth = 500;
self.preferredPrimaryColumnWidthFraction = 1;
答案 3 :(得分:0)
我喜欢在拆分视图控制器子类中使用此方法:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
} completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
// adjust column sizes based on size param
// e.g. call same method called by viewDidLoad
}];
}
它们应该是可动画的,但是根据我的经验,当设置在animateAlongsideTransition中时,它们不会动画,这可能是因为在旋转或多任务调整大小期间已经发生了太多事情。因此,为什么我只在完成时这样做。