iOS:Autolayout和popOverController问题(可能是Xcode错误)

时间:2016-09-24 01:01:36

标签: ios objective-c autolayout xib popover

我在下面的代码中显示了我的popOverController iPhone和iPad。

 ViewController *vc = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];

if ([UIDevice currentDevice].userInterfaceIdiom ==
    UIUserInterfaceIdiomPad) {
    vc.preferredContentSize = CGSizeMake(296, 476); //your custom size.
} else {
    vc.preferredContentSize = CGSizeMake(252, 436.5);
}

 vc.modalPresentationStyle = UIModalPresentationPopover;
 vc.popoverPresentationController.delegate = self;
 vc.popoverPresentationController.sourceView = self.view;
 vc.popoverPresentationController.sourceRect = CGRectMake(screenWidth / 2, self.view.height / 2, 1, 1);

[self presentViewController:vc animated:YES completion:nil];

UIPopoverPresentationController *popOverController =  vc.popoverPresentationController;
popOverController.permittedArrowDirections = 0;

但是,似乎发生了班级规模问题。即使在运行iPad设备时,似乎也在使用iPhone尺寸而不是iPad尺寸。尽管在界面构建器中,它根据所选的设备显示两个不同的按钮大小。

编辑:例如,我有一个带按钮的viewcontroller.xib。根据实际设备,有两种不同的按钮尺寸。在iPhone上,按钮的尺寸为50 x 50.在iPad上,它的尺寸为430 x 430.在界面构建器中,这显示正确。但是,在运行iPad设备时,按钮显示为50 x 50(假设为430 x 430)。

1 个答案:

答案 0 :(得分:2)

故事板中的条件约束使用大小类

iPad上popover呈现的视图控制器上的水平尺寸等级是紧凑的,就像在iPhone上一样。这就是为什么你看到按钮的iPhone尺寸。

要确定这是真的,请将ViewController类中的viewDidAppear:覆盖为NSLog self.traitCollection。您将看到水平尺寸类是Compact。

这是有道理的,因为弹出窗口就像iPad上出现的iPhone大小的窗口。事实上,这是一个popover的整个