Apple制作的iOS教程帮助:与嵌套堆栈视图无意中重叠

时间:2017-01-15 17:23:16

标签: ios swift xcode swift3 xcode8

我一直在关注苹果制作的官方iOS开发教程(located here)。它是一个新的教程,创建于12月16日,所以我还没有能够找到这个问题的任何答案。以下是我坚持的部分:

  

进一步探索

     

在编辑模式下,评级控制扩展到删除   按钮。这是因为单元格的布局不是使用Auto设计的   布局。控件适合正常分配的空间,但控件   当空间减少时,它不会适应。

     

要解决此问题,您需要使用嵌套堆栈视图布局单元格   自动布局限制;然而,这仍然是一个练习   阅读器。

     

有关详细信息,请参阅Auto Layout Guide

我所做的每一次尝试都会压缩右侧(第5次开始)或左侧(食物图片)。

我有两个关键问题:

  1. 按下编辑按钮与删除按钮时的父视图是什么。通过我(有限的)理解,似乎左侧与右侧的行为不同。

  2. 低头的正确方向是什么?我最接近的解决方案如下:标签和评级系统的一个堆栈视图。然后是一个额外的堆栈视图,包含上面提到的和图片。

  3. 如果有人想修补它,可以在页面底部下载源代码。

    感谢您的时间。

1 个答案:

答案 0 :(得分:1)

就个人而言,我倾向于让星星缩小,所以如果你的空间不足,他们会适当调整大小。

不幸的是,要做到这一点,你必须调整一些代码。特别是,您可能需要调整RatingControl,以便星星优雅地调整大小。目前的实施强制其规模:

button.heightAnchor.constraint(equalToConstant: starSize.height).isActive = true
button.widthAnchor.constraint(equalToConstant: starSize.width).isActive = true

我建议更改它以使尺寸为最大值"并且仅确保宽度与高度的比率不变。

button.heightAnchor.constraint(lessThanOrEqualToConstant: starSize.height).isActive = true
button.widthAnchor.constraint(lessThanOrEqualToConstant: starSize.width).isActive = true
button.widthAnchor.constraint(equalTo: button.heightAnchor).isActive = true

或者,就个人而言,我认为等效的activate语法更清晰:

NSLayoutConstraint.activate([
    button.heightAnchor.constraint(lessThanOrEqualToConstant: starSize.height),
    button.widthAnchor.constraint(lessThanOrEqualToConstant: starSize.width),
    button.widthAnchor.constraint(equalTo: button.heightAnchor)
])

您可能还应该使按钮大小相同(所以我只是将上述约束添加到第一个按钮,然后使所有其他按钮的约束与第一个按钮的大小和宽度相同)。

然后,如果您向要调整评级控件大小的单元格添加适当的约束,则将正常调整评级控件的大小。

或者您可以使用堆栈视图:

  • 将标签和RatingControl添加到一个垂直堆栈视图;
  • 将堆栈视图和图像视图添加到水平堆栈视图;和
  • 在该堆栈视图和单元格的内容视图之间添加约束。

就个人而言,我不认为堆栈视图方法比添加适当的约束要容易得多,但两种方法都可以正常工作。有时堆叠视图会让生活变得更加轻松,但我认为在这种情况下它是一种清洗。你的选择。

你问:

  

按下编辑按钮与删除按钮时的父视图是什么?

图像视图的父视图,评级控件和标签是单元格"内容视图"。无论单元格是否处于编辑模式,这都是内容视图。这是内容视图的目的,因此当单元格进入或退出编辑模式时,整体视图层次结构不必更改。如果您对任何给定点的视图层次结构有疑问,您可以随时在调试器中暂停执行并使用视图调试器按钮see stackoverflow.com/a/34447819/1271826

enter image description here

在那里,您可以看到视图层次结构中的UITableViewCellContentView是相同的,无论该单元格是否处于编辑模式。