ios – Autolayout和UIPopoverController

ios – Autolayout和UIPopoverController,第1张

概述我创建了一个包含一些子视图的面板,并使用NSLayoutConstraints来实现定位. 然后我会在UIPopoverController中显示它.在设置它之前,我会调用[UIView layoutIfNeeded]命令强制它自己调整大小(整体大小基于其中可能有不同大小的图像大小). PhotoDisplayPanel *panel = [[PhotoDisplayPanel alloc] in 我创建了一个包含一些子视图的面板,并使用NSLayoutConstraints来实现定位.

然后我会在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>>

以前,我会在将它添加到视图之前添加[panel layoutIfNeeded]调用.这很好.但是对于iOS 8.1,他们改变了layoutIfNeeded的工作方式,如果你在将我的面板添加到视图之前调用它,它会吓坏并开始破坏约束以使其正常工作.

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

小组看起来像:

我创建了UIPopoverController,将面板设置为视图,然后将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.
注意:您的约束必须固定(左/上/右/下)到视图控制器视图,以便能够计算视图的总宽度/高度.

要做到这一点,请在vIEwWillAppear中添加以下行:

- (voID)vIEwWillAppear:(BOol)animated {[super vIEwWillAppear:animated];CGSize resultSize = [self.vIEw systemLayoutSizefittingSize:UILayoutFittingCompressedSize];self.preferredContentSize = resultSize;}
总结

以上是内存溢出为你收集整理的ios – Autolayout和UIPopoverController全部内容,希望文章能够帮你解决ios – Autolayout和UIPopoverController所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1058125.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存