我正在参加斯坦福冬季2015 Swift / iOS课程,在完成作业时,我遇到了一个我想改变的行为。
我使用视频中描述的Autolayout(将显示引脚设置为前导和尾随视图边缘)和计算器应用程序“显示”UILabel很好,初始值为0,每当用于设置它的值(一个字符串) )是非零和非“”。
如果它是nil或“”,则整个UILabel消失。我想要做的是在没有值显示或不正确的计算结果为零时“清除”显示。
关于一般如何处理此问题的任何提示? “清除”UILabel而不改变它的屏幕尺寸?
编辑(感谢Rob) UILabel具有以下约束 1.按住Option键并向左拖动到包含UIView,选择“领先”的东西(在通勤上班时无法检查确切的措辞。 2.与(1)相同的方法,除了拖动到右边缘并选择“尾随” 3.选项单击 - 向上拖动到视图顶部,选择“垂直”菜单选项。 4.与(3)相同,只是拖动到GUI上UILabel下面的UIButton。
使用这些设置时,包含数字的标签始终可见,并且(如果理解,将对其进行着色以验证)即使文本没有,也会在屏幕上延伸。
只要UILabel的内容不为空,布局在配置文件和横向上看起来都是正确的。如果是空的,它似乎“缩小到适合”,以至于下面的按钮向上移动。
自90年代中期以来,我就是一名C ++开发人员,但我在iOS / Swift开发方面经验不多,只有几周的经验。
谢谢!
答案 0 :(得分:1)
您始终可以为UILabel指定最小宽度和最小高度或包含标签左侧和右侧的约束。这应该使标签不会将其尺寸更改为零。
答案 1 :(得分:1)
在我的情况下,我最终把它变成了一个空格,所以“”而不是“”
答案 2 :(得分:0)
使用UILabel
中指定的自定义Interface Builder >> Identity inspector >> Custom Class >> Class
类来覆盖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
}
}
}
您还需要"How do copy for UILabel?":
extension UILabel
{
func createCopy() -> UILabel
{
let archivedData = NSKeyedArchiver.archivedData(withRootObject: self)
return NSKeyedUnarchiver.unarchiveObject(with: archivedData) as! UILabel
}
}