tabBar.topAnchor 的奇怪布局

Posted

技术标签:

【中文标题】tabBar.topAnchor 的奇怪布局【英文标题】:Weird layout with tabBar.topAnchor 【发布时间】:2018-03-14 16:55:30 【问题描述】:

我有几个子视图

    view.addSubview(collectionView)
    view.addSubview(pageControl)
    view.addSubview((tabBarController?.tabBar)!)
    view.addSubview(skipButton)
    view.addSubview(nextButton)

我尝试通过 layoutAnchor 进行布局。 (此时我将 pageControl.bottomAnchor 锚定到 view.bottomAnchor )

   nextButton.anchorWithConstantsToTop(view.topAnchor, left: nil, bottom: nil, right:
        view.rightAnchor, topConstant: 16, leftConstant: 0, bottomConstant: 0, rightConstant: 0)
    nextButtonTopAnchor = nextButton.topAnchor.constraint(equalTo: view.topAnchor, constant: 0)
    nextButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
    nextButton.widthAnchor.constraint(equalToConstant: 60).isActive = true
    skipButton.anchorWithConstantsToTop(view.topAnchor, left: view.leftAnchor, bottom: nil, right: nil, topConstant: 16, leftConstant: 0, bottomConstant: 0, rightConstant: 0)
    skipButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
    skipButton.widthAnchor.constraint(equalToConstant: 60).isActive = true
    pageControl.anchorWithConstantsToTop(nil, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor, topConstant: 0, leftConstant: 28, bottomConstant: 0, rightConstant: 30) 

所以它工作得很好,当我将设备 pageControl 夹在适当的位置时

但是如果试图锚定 pageControl.bottomAnchor = tabBarController?.tabBar.topAnchor 而不是 view.bottomAnchor 则在纵向上一切正常,但是当我旋转设备时会发生一些令人讨厌的事情:pageControl 上升

此外,当我将横向方向转换为纵向方向时 它仍然在上面的位置

我猜问题出在 pageControl.bottomAnchor = tabBarController?.tabBar.topAnchor 字符串中,但我知道为什么?在横向仍然保留 tabBar 和 pageControl 仍然必须将其锚定到 tabBar 的 topAnchor。请也许有人知道这种行为是怎么回事?

【问题讨论】:

您是否尝试在要添加的所有视图上设置 translatesAutoresizingMaskIntoConstraints = false?如果您不将此设置为 false,则有时可能会出现奇怪的行为。您可能还需要在更改约束时调用 layoutIfNeeded。 【参考方案1】:

问题出在这一行:

view.addSubview((tabBarController?.tabBar)!)

你不应该那样做。请在将当前视图控制器添加到UITabBarController 后删除它,然后设置您的约束。第一次执行viewWillAppear 是一个候选样本。

如果您以编程方式创建了pageControl,那么您还应该将其translatesAutoresizingMaskIntoConstraints 属性设置为false(如cmets 中所指出的)。如果控件是在情节提要中创建的,则不需要此步骤。

【讨论】:

以上是关于tabBar.topAnchor 的奇怪布局的主要内容,如果未能解决你的问题,请参考以下文章

Tab+ViewPager 不更新而是显示奇怪的警告预期状态 3 found 2

安卓中dialog布局中有动态的tab标签怎么写

div比tab布局的优势

easyui 在布局中间部分加了一个tab,tab的高度不能自适应,只能设置固定值

全屏上的 d3d11 alt-tab 给出了奇怪的结果

[Layui]后台大布局tab风格-静态页面