UILabel文本属性设置为nil或"&引用;使UILabel从视图中消失(Swift/Autolayout/iOS9.1)

UILabel文本属性设置为nil或"&引用;使UILabel从视图中消失(Swift/Autolayout/iOS9.1),ios,swift,uilabel,Ios,Swift,Uilabel,我正在参加斯坦福大学2015年冬季Swift/iOS课程,在完成作业时,我遇到了一种我想改变的行为 我使用视频中所述的自动布局(将显示固定到前导和后导视图边缘)和计算器应用程序“display”UILabel,初始值为0,且用于设置它的值(字符串)为非零和非“”时,该标签就可以了 如果为nil或“”,则整个UILabel将消失。我试图做的是在没有值显示或错误计算导致零时“清除”显示 关于一般情况下由谁来处理这个问题,有什么建议吗?“清除”UILabel而不更改其屏幕尺寸 编辑(谢谢Rob) U

我正在参加斯坦福大学2015年冬季Swift/iOS课程,在完成作业时,我遇到了一种我想改变的行为

我使用视频中所述的自动布局(将显示固定到前导和后导视图边缘)和计算器应用程序“display”UILabel,初始值为0,且用于设置它的值(字符串)为非零和非“”时,该标签就可以了

如果为nil或“”,则整个UILabel将消失。我试图做的是在没有值显示或错误计算导致零时“清除”显示

关于一般情况下由谁来处理这个问题,有什么建议吗?“清除”UILabel而不更改其屏幕尺寸


编辑(谢谢Rob) UILabel具有以下约束 1.选项单击并向左拖动到包含UIView的位置,选中的“引导”内容(在上班路上)无法查看确切的措辞。 2.与(1)相同的方法,不同的是拖动到右边缘并选择“拖尾” 3.选项单击并向上拖动到视图顶部,选择“垂直”菜单选项。 4.与(3)相同,只是拖动到GUI上UILabel下面的UIButton

通过这些设置,包含数字的标签始终可见,并且(如果理解,将对其进行颜色验证)在屏幕上延伸,即使文本没有

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

我是90年代中期以来的C++开发人员,但我的UI体验很少,iOS和SWIFT开发的经验不超过两周。


谢谢!

您可以始终为UILabel指定一个最小宽度和最小高度或约束,以固定标签的左侧和右侧。这应该可以防止标签将其尺寸更改为零。

在我的情况下,我最终将其设置为一个空格,因此“而不是”使用
接口生成器>>标识检查器>>自定义类>>类中指定的自定义
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
        }
    }
}
您还需要:


编辑您的问题,以描述您在标签视图上设置的控制其位置和大小的约束。您是否尝试调用
label.sizeToFit()
?是否尝试生成返回的if语句:“”(清除标签)如果倒计时器==0?@varsuuk不确定“倒计时器==0”引用了什么;)但我确实找到了一个非常“对我的开发人员敏感度没有吸引力”的解决方法,即每当支持加倍时,将UILabel设置为“”(1个空格)?属性返回的值为零。UILabel是否在UIStackView中?谢谢,我会在Mac上检查这一点,但是有没有办法将iOS控制的最小宽度设置为视图宽度?我曾经相信,当选项拖动从控件单击到左边缘和右边缘时,我就是这么做的,但我对这一点还不熟悉。可能是全宽,但可能是高度,正如你提到的,可能已经缩小了-我会将UILabel的颜色与view不同,以获取更多信息。我认为你需要做的是给它一个最小高度。谢谢@animal,在之前的评论中,我想,但是用我古怪的拇指在iPad上打字让我过早地输入了一行。将检查并更新。我更新了代码以设置UILable不透明,事实上,它在开始时用黑色填充整行,在UILabel中有有效值,但在为零或“.”时变为零。\n尝试查看如何设置“最小高度/宽度”,而不是通过选项拖动设置自动布局约束。今晚我可能需要试试,因为工作太忙了,除了最近的更新之外,我看不到这些东西。谢谢也许这有助于:
extension UILabel
{
    func createCopy() -> UILabel
    {
        let archivedData = NSKeyedArchiver.archivedData(withRootObject: self)
        return NSKeyedUnarchiver.unarchiveObject(with: archivedData) as! UILabel
    }
}