自动布局不适用于 Plus 型号

Posted

技术标签:

【中文标题】自动布局不适用于 Plus 型号【英文标题】:AutoLayout not working for Plus models 【发布时间】:2018-05-11 23:06:56 【问题描述】:

我目前正在开发一个教育应用程序,第一个视图控制器显示主要类别,第二个(几乎像 Pinterest)显示几个子类别。我使用的自动布局非常适用于 iPhone 6、7、8 和 X,但是其中的 Plus 型号有点失真

这就是它在模型 6、7、8 和 X 中的样子

但是,当我在 Plus 模型中运行它时,它看起来像下面这样:

我有以下自动布局代码

这个自动布局对应于第一个视图控制器,我使用的是堆栈视图,因此滚动视图的高度可以根据堆栈视图的内容进行调整。

此自动布局对应于类似 Pinterest 的子类别视图控制器。我正在使用 Ryan Wenderlich 使用的代码,但是在两个视图控制器中我都使用按钮而不是使用图像,以便用户可以转到相应的部分。我以编程方式添加它们,但始终连接到单元项目原型。

如何才能使自动布局适用于 Plus 型号?

【问题讨论】:

S Model 你是说Plus models? 没错,例如iPhone 6S、7S和8S 您的 StackView 类型是什么?对齐和分布? StackView 类型 = 垂直;对齐 = 填充和分布 = 等间距 不看代码很难找到问题。你能上传你的代码吗?或与我分享,我可以查看您的代码并找到问题。 【参考方案1】:

我发现了你的问题:

每个按钮都有一个Button 的标题,您应该删除默认标题。该标题推动了按钮的图像,并且由于标题为白色,您没有看到它。

你也可以通过Control > Alignment section控制UIButtons的图片看我附上的截图。

顺便说一句,我建议你在上面使用UIImageView + UIButton 而不是使用UIButton 的图像内容。

编辑

CollectionView 真是一团糟!它会吃很多内存。你有很多相互重叠的细胞。

顺便说一句,您的第二个视图控制器问题似乎与未设置约束的 stackviews 相关。

    cell.addSubview(stackView)

    NSLayoutConstraint(item: stackView, attribute: .centerX, relatedBy: .equal, toItem: cell, attribute: .centerX, multiplier: 1, constant: 0).isActive = true
    NSLayoutConstraint(item: stackView, attribute: .centerY, relatedBy: .equal, toItem: cell, attribute: .centerY, multiplier: 1, constant: 0).isActive = true

我刚刚将stackviews 之一居中,我发现它与约束有关。

以编程方式设置Constraint 如下所示: Swift | Adding constraints programmatically

【讨论】:

非常感谢!它真的帮了我很多!那么第二个视图控制器呢?哪里有像 Pinterest 这样的带有收藏视图的滚动视图?当我在 iPhone 8S 和 7S 机型上使用时,它看起来也很失真

以上是关于自动布局不适用于 Plus 型号的主要内容,如果未能解决你的问题,请参考以下文章

动态更改 UILabel 宽度不适用于自动布局

自动布局单元格高度不适用于单个单元格

UITableHeaderView 自动布局中的 UILabel 不适用于 iPhone 6

自动布局不适用于可重用的表格视图单元格

iOS - 自动布局不适用于 3.5" 屏幕

iOS - 自动布局不适用于主 UIView - (内部截图)