gpt4 book ai didi

ios - 自动布局和 UIPopoverController

转载 作者:可可西里 更新时间:2023-11-01 05:11:52 25 4
gpt4 key购买 nike

我创建了一个面板,其中包含一些 subview ,并使用 NSLayoutConstraint 来实现定位。

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

PhotoDisplayPanel *panel = [[PhotoDisplayPanel alloc] initWithPhoto:cell.photo isAddPhoto:cell.isAddPhoto];

DLog(@"BEFORE | panel.frame: %@", panel);

[self.view addSubview:panel];

DLog(@"MIDDLE | panel.frame: %@", panel);

[panel layoutIfNeeded];

DLog(@"AFTER | panel.frame: %@", panel);

日志:

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>>

以前,我会在将其添加到 View 之前添加 [panel layoutIfNeeded] 调用。这很好用。但是在 iOS 8.1 中,他们改变了 layoutIfNeeded 的工作方式,如果您在将我的面板添加到 View 之前调用它,它会崩溃并开始打破约束以使其正常工作。

我的问题是使用 UIPopoverController,因为我不能调用 layoutIfNeeded 我的面板没有大小,所以它使用 popover 的默认大小:

enter image description here

虽然面板看起来像:

enter image description here

我创建了 UIPopoverController,将面板设置为其 View ,然后将 preferedContentSize 属性设置为面板的大小:

UIViewController *viewController = [[UIViewController alloc] init];
viewController.view = self.currentPanel;
viewController.preferredContentSize = CGSizeMake(self.currentPanel.frame.size.width, self.currentPanel.frame.size.height + 00);

由于面板还没有调整大小,所以它是 (0, 0)。

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

最佳答案

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

方法是,在您的 viewWillAppear 中添加这些行:

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

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

关于ios - 自动布局和 UIPopoverController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29128271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com