[英]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.