编程布局约束导致旋转不调整基本 UIView
Posted
技术标签:
【中文标题】编程布局约束导致旋转不调整基本 UIView【英文标题】:Programmatic layout constraints causes rotation not to resize base UIView 【发布时间】:2016-04-25 21:25:15 【问题描述】:所以我正在创建一个包含两个元素的 UIViewController 子类:标题 UIView 和它下面的 UITableView。
----------------
||------------||
||Header View ||
||------------||
||------------||
|| Table View ||
|| ||
|| ||
|| ||
||------------||
----------------
我在初始化代码中给Header view和Table View添加约束如下:
- (void)setupHeaderView
self.headerView.backgroundColor = [UIColor whiteColor];
self.headerViewTopConstraint = [NSLayoutConstraint constraintWithItem:self.headerView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0.0];
self.headerViewLeadingConstraint = [NSLayoutConstraint constraintWithItem:self.headerView
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:0.0];
self.headerViewTrailingConstraint = [NSLayoutConstraint constraintWithItem:self.headerView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTrailing
multiplier:1.0
constant:0.0];
self.headerViewHeightConstraint = [NSLayoutConstraint constraintWithItem:self.headerView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:HeaderViewHeight];
- (void)setupTableView
self.tableViewTopConstraint = [NSLayoutConstraint constraintWithItem:self.tableView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.headerView
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0];
self.tableViewLeadingConstraint = [NSLayoutConstraint constraintWithItem:self.tableView
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:0.0];
self.tableViewTrailingConstraint = [NSLayoutConstraint constraintWithItem:self.tableView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTrailing
multiplier:1.0
constant:0.0];
self.tableViewBottomConstraint = [NSLayoutConstraint constraintWithItem:self.tableView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0];
这两个视图被添加到 self.view 并在调用之前:
self.view.translatesAutoresizingMaskIntoConstraints = NO;
但主要问题是,在加载此视图并旋转设备/模拟器时,视图保持其纵向框架并保持其原点,因此设备窗口是水平的,但视图框架仍然是其纵向框架,导致它离开屏幕并在其旁边有一个空白的黑色空间:
提供的屏幕截图:
我如何保持传播到父视图以及随后传播到其子视图的方向变化?
【问题讨论】:
....我觉得自己像个白痴....那行得通。谢谢。如果您发表评论,我会将其标记为已回答。 【参考方案1】:实际上,您应该将标题和表格视图的translatesAutoresizingMaskIntoConstraints
设置为NO
。
主视图的translatesAutoresizingMaskIntoConstraints
值应始终保持为YES
:
view.translatesAutoresizingMaskIntoConstraints = YES;
headerView.translatesAutoresizingMaskIntoConstraints = NO;
tableView.translatesAutoresizingMaskIntoConstraints = NO;
【讨论】:
以上是关于编程布局约束导致旋转不调整基本 UIView的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 在 Swift 3 中以编程方式删除和激活新约束时布局损坏
调整大小后使用自动布局以编程方式居中 UIImageVIew