我正在读斯坦福冬季2015 Swift/iOS课程,在做作业时,我遇到了一种我想改变的行为。
我使用Autolayout,如视频中所述(使显示引脚到前导和后置视图边缘),计算器应用程序“显示”UILabel很好,初始值为0,每当用于设置它的值(字符串)是非零和非“。
如果是零或"",则整个UILabel消失。我试图做的是“清除”显示时,当没有值显示或一个不正确的计算结果为零。
一般情况下谁来处理这件事有什么建议吗?“清除”一个UILabel而不改变它的屏幕尺寸?
编辑(谢谢罗布)的UILabel有以下约束1。选择-点击拖动-左包含UIView,选择“引导”的东西(上下班还不能检查确切的措辞。2.与(1)相同的方法,除了拖动到右侧边缘并选择“拖尾”3。选项单击-拖到视图顶部,选择“垂直”菜单选项。4.与(3)相同,只是拖动到图形用户界面上的UIButton下面的UILabel。
有了这些设置,当标签包含一个数字时总是可见的,并且(如果理解的话,会给它着色以验证)延伸到屏幕上,即使文本没有。
只要UILabel的内容不是空的,布局在轮廓和景观上看起来是正确的。如果是空的,它似乎“收缩到适合”那么多,下面的按钮被移动到顶部。
从90年代中期开始,我是一个C++开发人员,但我的UI经验很少,而且在iOS/Swift开发方面的经验也不超过几周。
谢谢!
发布于 2018-01-31 13:15:05
使用在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
}
}https://stackoverflow.com/questions/33382984
复制相似问题