Ios 自动布局和超控器

Ios 自动布局和超控器,ios,objective-c,uipopovercontroller,nslayoutconstraint,Ios,Objective C,Uipopovercontroller,Nslayoutconstraint,我创建了一个包含一些子视图的面板,并使用NSLayoutConstraints来实现定位 然后,我会在UIPopoverController中显示它。在设置它之前,我会调用[UIView layoutifneed]命令来强制它调整自身大小(总体大小基于其中图像的大小,可以是不同的大小) 日志: 由于面板尚未调整大小,因此为(0,0) 我现在的问题是,如何强制我的面板根据约束调整大小?解决方案是根据您的约束计算preferredContentSize。 注意:必须将约束(左/上/右/下)固定到视图

我创建了一个包含一些子视图的面板,并使用
NSLayoutConstraint
s来实现定位

然后,我会在
UIPopoverController
中显示它。在设置它之前,我会调用
[UIView layoutifneed]
命令来强制它调整自身大小(总体大小基于其中图像的大小,可以是不同的大小)

日志:

由于面板尚未调整大小,因此为(0,0)


我现在的问题是,如何强制我的面板根据约束调整大小?

解决方案是根据您的约束计算preferredContentSize。 注意:必须将约束(左/上/右/下)固定到视图控制器视图,以便能够计算视图的总宽度/高度

要执行此操作,请在视图中添加以下行:

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

CGSize resultSize = [self.view systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
self.preferredContentSize = resultSize;
}

这应该被标记为答案。我测试了它,它工作得很好。它确实工作得很好!你救了我一天!
DEBUG | -[LoginViewController viewDidLoad] | BEFORE | panel.frame: <PhotoDisplayPanel: 0x7878a3f0; frame = (0 0; 0 0); layer = <CALayer: 0x7878a7e0>>
DEBUG | -[LoginViewController viewDidLoad] | MIDDLE | panel.frame: <PhotoDisplayPanel: 0x7878a3f0; frame = (0 0; 0 0); layer = <CALayer: 0x7878a7e0>>
DEBUG | -[LoginViewController viewDidLoad] | AFTER | panel.frame: <PhotoDisplayPanel: 0x7878a3f0; frame = (-358 -245; 578 289); layer = <CALayer: 0x7878a7e0>>
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view = self.currentPanel;
viewController.preferredContentSize = CGSizeMake(self.currentPanel.frame.size.width, self.currentPanel.frame.size.height + 00);
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

CGSize resultSize = [self.view systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
self.preferredContentSize = resultSize;
}