当设置为nil或“”时,UILabel文本属性使UILabel从视图中消失(Swift / Autolayout / iOS9.1)

我正在经历斯坦福冬季2015 Swift / iOS课程,在完成任务时我遇到了一个我想改变的行为。

我使用video中描述的Autolayout(将显示引脚设置为前导和尾随视图边缘)和计算器应用程序“显示”UILabel很好,初始值为0,并且每当用于设置它的值(字符串)为非-nil和non“”。

如果它是nil或“”,则整个UILabel消失。 我想要做的是在没有值显示或不正确的计算结果为零时“清除”显示。

关于谁应该处理这个问题的一般提示? “清除”UILabel而不改变它的屏幕尺寸?


编辑(感谢Rob)UILabel具有以下约束条件1.按住Option键并向左拖动到包含UIView,选择“引导”某些东西(在通勤上class时无法检查确切的措辞.2。与(1)相同的方法除了拖动到右边缘并选择“尾随”3.选项点击 – 向上拖动到视图顶部,选择“垂直”菜单选项.4。与(3)相同,只是拖动到UILabel下面的UIButton在GUI上。

使用这些设置时,包含数字的标签始终可见,并且(如果理解,将对其进行着色以validation)即使文本没有,也会在屏幕上伸展。

只要UILabel的内容不为空,布局在轮廓和横向上看起来都是正确的。 如果是空的,它似乎“缩小到适合”,以至于下面的按钮向上移动到顶部。

自90年代中期以来,我就是一名C ++开发人员,但我在iOS / Swift开发方面经验不多,只有几周的经验。

谢谢!

您始终可以为UILabel指定最小宽度和最小高度或约束,以保持标签的左侧和右侧。 这应该使标签不会将其尺寸更改为零。

在我的情况下,我最终使它成为一个空间,所以“”而不是“”

使用在Interface Builder >> Identity inspector >> Custom Class >> Class分配的自定义UILabel类来覆盖UILabel内在内容大小。

无需创建任何多余的自动布局约束。

迅速:

 class UILabelNonCompressible: UILabel { private static let NonCompressibleInvisibleContent = " " override var intrinsicContentSize: CGSize { if /* zero-width */ text == nil ? true : text!.isEmpty { // prefer mirror-and-calculate over modify-calculate-restore due to KVO let doppelganger = createCopy() // calculate for any non-zero -height content doppelganger.text = UILabelNonCompressible.NonCompressibleInvisibleContent // override return doppelganger.intrinsicContentSize } else { return super.intrinsicContentSize } } } 

您还需要“如何复制UILabel?” :

 extension UILabel { func createCopy() -> UILabel { let archivedData = NSKeyedArchiver.archivedData(withRootObject: self) return NSKeyedUnarchiver.unarchiveObject(with: archivedData) as! UILabel } }