CS193p - 2015 年冬季 - 计算器故事板自动布局

Posted

技术标签:

【中文标题】CS193p - 2015 年冬季 - 计算器故事板自动布局【英文标题】:CS193p - Winter 2015 - Calculator Storyboard Autolayout 【发布时间】:2015-03-01 14:17:16 【问题描述】:

我正在使用 App Store 中最新的 Xcode (6.1.1 6A2008a) 完成最新斯坦福 CS193p 课程的计算器作业的自动布局部分。

用于显示的Label 的约束正常工作,但是当我布置Buttons 时,自动布局似乎忽略了Label 的存在。即使在讲座中添加了约束之后,Buttons 似乎也忽略了Label,即使约束计数与 Hegarty 教授的匹配。

布局像这样“工作”,但它不“正确”,我想知道我在这里做错了什么,所以我不会养成不良的自动布局习惯。

我会发布截图,但我显然没有足够的声誉这样做,所以我把我的工作代码放到了 github 上:

https://github.com/krger/cs193p-2015/tree/master/Calculator

如果有任何意见/指导/建议,我将不胜感激。除了这里,iTunes U“学生”似乎没有一个可以讨论课程的地方。

【问题讨论】:

【参考方案1】:

您的顶部按钮固定在顶部布局指南而不是显示标签的底部。记住,赫加蒂教授说过要注意蓝线。您的顶部按钮与显示标签重叠,因此当您为按钮创建约束时,AutoLayout 选择将顶部按钮固定到顶部布局指南。

解决这个问题:

    摆脱所有限制。 为显示标签添加回约束。 选择所有按钮并将它们向下拖动,使 7/8/9/x/sin 的顶部与显示标签的底部对齐。 为您的按钮重新添加约束。

解决此问题的另一种方法是:

    删除每个 7/8/9/x/sin 按钮的顶部约束。 在“文档布局”视图中,control 依次从每个按钮拖动到显示标签,然后从弹出窗口中选择垂直间距。这将在显示标签的底部添加一个垂直间距约束。您现在只需要修复常量。 依次单击每个 7/8/9/x/sin 按钮。在 Size Inspector 中编辑 Top Space 约束,将常量更改为 08

【讨论】:

感谢您的快速回答。当我最初放置Buttons 时,我试图将它们与显示器底部Label 对齐,但我没有得到Label 底部的蓝色引导线——只有顶部引导线。我删除了所有的限制并重新开始。我删除了 Display Label 并创建了一个新的,限制在顶部、左侧和右侧。我让它比它应该的高,所以它会提示我固定高度以匹配它的预期。即使是现在,我仍然没有得到Label底部的对齐指南——只有顶部指南。签入当前代码。【参考方案2】:

我也遇到过同样的问题,经过反复试验,我找到了解决方案。

虽然我不知道Xcode自动布局系统的后台机制,但这个问题似乎与UILabel的'Intrinsic Size'有关。

因此,在标签的“尺寸检查器”中,将“固有尺寸”值从“默认(系统定义)”更改为“占位符”。

之后,您将能够看到蓝色引导线。

无论如何,如果您知道它是如何工作的,请解释原因。谢谢。

【讨论】:

【参考方案3】:

在第二堂课的 56:10 左右,他说如果您选择标签,然后在位于右下角的“解决自动布局问题”图标中选择“重置为建议的约束”(两个之间的小三角形)垂直平行线),您可以看到标签的底部边缘。这似乎已经为我解决了。

【讨论】:

【参考方案4】:

我遇到了一个非常相似的问题,我的按钮没有表现出他们理解的行为,我希望相对于顶部标签的边距为 8。他们只是将自己与视图的底部隔开。

嗯...问题就是这样。尽管在顶部约束中设置了 8(在 Pin-->"Add New Constraints" 部分中),但该条仍然被点缀。 (我会发布一张图片,但没有足够的声誉)。

您需要确保在添加新约束时,条形图变为实心。这意味着系统理解了约束。

我通过删除数字、切换到另一个框并再次输入数字来解决此问题。我很确定这是一个 xcode 故障,但是,在几次 xcode 崩溃之后,它终于起作用了。希望这会有所帮助......这对我来说也非常令人沮丧。

【讨论】:

【参考方案5】:

我遇到了同样的问题,并且能够通过清除约束、调整标签大小并重试来解决它。

我附上了我的尺寸屏幕截图,它可以让自动布局正常工作。您可以尝试复制我的 x=20、y=28 和 height=38,如下面的尺寸检查器面板所示:

【讨论】:

以上是关于CS193p - 2015 年冬季 - 计算器故事板自动布局的主要内容,如果未能解决你的问题,请参考以下文章

修改已经使用自动布局布局的情节提要

SwiftUI CS193P - 不能在属性初始化程序中使用实例成员“卡片”;属性初始化程序在“自我”可用之前运行

从零开始CS224W-图机器学习-2021冬季学习笔记13.2:Community Structure in Networks——BigCLAM算法

自动布局的基本理解

精彩CS:GO赛事不停歇,火猫直播邀你一次看个够!

高合HiPhi X冬季性能测试 年中将正式交付