繁体   English   中英

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

[英]UILabel text property when set to nil or "" makes UILabel disappear from view (Swift / Autolayout/ iOS9.1)

我正在学习斯坦福大学 2015 年冬季 Swift/iOS 课程,在做作业时我遇到了我想改变的行为。

我使用视频中描述的自动布局(使显示引脚指向前视图和后视图边缘)并且计算器应用程序“显示”UILabel 很好,初始值为 0 并且每当用于设置它的值(字符串)是非-nil 和非“”。

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

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


编辑(感谢 Rob) UILabel 具有以下约束 1. Option-click 向左拖动以包含 UIView,选择“领先”的东西(上班途中无法检查确切的措辞。2. 与(1)相同的方法除了拖动到右边缘并选择“拖尾” 3. 选项单击并拖动到视图顶部,选择“垂直”菜单选项。 4. 与(3)相同,只是拖动到 UILabel 下方的 UIButton在图形用户界面上。

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

只要 UILabel 的内容不为空,布局在配置文件和横向中看起来是正确的。 如果为空,它似乎“缩小以适应”太多以至于下面的按钮向上移动到顶部。

我是 90 年代中期以来的 C++ 开发人员,但我几乎没有 UI 经验,而且在 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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM