我有一个UIPageViewController,里面有一个简单的UIViewController。
如果UIViewController没有子视图,则其视图在旋转时会正确调整大小。 (纯绿色背景)。
如果UIViewController具有带固定框架的子视图,则其视图在旋转时可以正确调整大小。 (坚实的绿色背景,角落里有黄色方块)。
如果UIViewController有一个子视图,其自动布局约束设置为填充其超级视图,则其视图在旋转时不再正确调整大小。 (纯黄色背景,UIPageViewController的红色背景可见)。我使用的自动布局代码是:
UIView *v = [[UIView alloc] init];
[v setTranslatesAutoresizingMaskIntoConstraints:NO];
[v setBackgroundColor:[UIColor yellowColor]];
[[self view] addSubview:v];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(v);
NSArray *cs = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[v]|" options:0 metrics:nil views:viewsDictionary];
[[self view] addConstraints:cs];
cs = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[v]|" options:0 metrics:nil views:viewsDictionary];
[[self view] addConstraints:cs];
为什么子视图的自动布局会影响其超级视图?只有当它包含在UIPageViewController中时才会发生。
答案 0 :(得分:10)
我也有这个问题,以前的答案似乎没什么帮助。我需要为与PageViewController一起使用的scrollview添加约束。
// Add Paging View Controller
self.addChildViewController(self.pageViewController)
self.pageViewController.didMoveToParentViewController(self)
self.containerView.addSubview(self.pageViewController.view)
// Add Constraints
var verticalConstraints:Array = NSLayoutConstraint.constraintsWithVisualFormat("V:|[View]|", options: nil, metrics: nil, views: ["View":self.pageViewController.view])
var horizontalConstraints:Array = NSLayoutConstraint.constraintsWithVisualFormat("|[View]|", options: nil, metrics: nil, views: ["View":self.pageViewController.view])
self.pageViewController.view.setTranslatesAutoresizingMaskIntoConstraints(false)
self.containerView.addConstraints(verticalConstraints)
self.containerView.addConstraints(horizontalConstraints)
// Add Constraints for the Scrollview
//This line is a bit of a hack. If Apple ever changes the structure of the UIPageViewController, this could break.
let scrollView = self.pageViewController.view.subviews.first! as UIView
scrollView.setTranslatesAutoresizingMaskIntoConstraints(false)
verticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("V:|[View]|", options: nil, metrics: nil, views: ["View":scrollView])
horizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("|[View]|", options: nil, metrics: nil, views: ["View":scrollView])
self.pageViewController.view.addConstraints(verticalConstraints)
self.pageViewController.view.addConstraints(horizontalConstraints)
答案 1 :(得分:7)
页面视图控制器的视图不是表示页面的视图的超级视图。页面视图控制器的视图具有由自定义滚动视图子类组成的视图层次结构,该滚动视图又具有三个通用视图子类,每个子类用于索引0到2中包含的视图控制器的视图。这些视图用作超视图你包含的观点。您必须将自动布局约束定位到这些视图。但是使用自动调整遮罩并让它们转换为自动布局约束要容易得多。
答案 2 :(得分:0)
我明白了:
我在容器控制器类中调用了[[_pageViewController view] setTranslatesAutoresizingMaskIntoConstraints:NO];
,并没有在其视图(或视图,如Bored Astronaut提到的视图)上显式设置自动布局约束。
答案 3 :(得分:0)
output_to_plot = []
with open('multi_items.txt', 'r') as infile:
for line in infile:
output_to_plot.extend([float(item) for item in line.split(' ')])
print(output_to_plot)
的视图帧,然后再将其添加到父视图中。
UIPageViewController
在不设置框架的情况下,子视图控制器将以任何方向正确显示和定位,但其子视图不能正确布局。