• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 编程布局约束导致旋转不调整基本 UIView

[复制链接]
菜鸟教程小白 发表于 2022-12-12 19:31:28 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

所以我正在创建一个包含两个元素的 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];
}

这两个 View 被添加到 self.view 并在调用之前:

self.view.translatesAutoresizingMaskIntoConstraints = NO;

但主要问题是,在加载此 View 并旋转设备/模拟器时, View 会保持其纵向框架并保持其原点,因此设备窗口是水平的,但 View 框架仍然是其纵向框架,导致它离开屏幕并在其旁边有一个空白的黑色空间:

提供的屏幕截图: Simulator Screenshot

我如何保持传播到父 View 以及随后传播到其 subview 的方向变化?



Best Answer-推荐答案


实际上,您应该将标题和表格 View 的 translatesAutoresizingMaskIntoConstraints 设置为 NO

主视图的 translatesAutoresizingMaskIntoConstraints 值应始终保持为 YES:

view.translatesAutoresizingMaskIntoConstraints = YES;
headerView.translatesAutoresizingMaskIntoConstraints = NO;
tableView.translatesAutoresizingMaskIntoConstraints = NO;

关于ios - 编程布局约束导致旋转不调整基本 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851351/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap