然后我会在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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)