如何在swift中为UILabel创建限制

时间:2017-03-22 06:45:52

标签: ios iphone swift uilabel

我想用代码解释我的问题。首先,您可以在下面看到自定义标签代码;

let resultLabel : UILabel = {
    let lbl = UILabel()
    lbl.textColor = .white
    lbl.textAlignment = .right
    lbl.text = "0"
    lbl.font = UIFont(name: "Helvetica Neue", size: 35)
    lbl.minimumScaleFactor = 0.75
    lbl.lineBreakMode = .byClipping
    lbl.adjustsFontSizeToFitWidth = true
    return lbl           
}()

我刚用这些代码行创建了标签。我还根据视图的框架高度大小和左边和右边的填充给它们特定的高度,你会在下面看到约束代码。

resultLabel.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: view.frame.size.height / 7, paddingLeft: 2, paddingBottom: 0, paddingRight: 5, width: 0, height: view.frame.size.height / 7)

我会根据点击按钮为UILabel分配值,所以我想设置UILabel的字符限制。根据我写的代码,它按我想要的方式裁剪数据,但它没有在值中执行相同的操作。怎么能实现这一点你能帮助我吗?感谢。

1 个答案:

答案 0 :(得分:0)

你想要的东西不是开箱即用的,在我看来会非常奇怪。现在数据和它的表示是分开的,应该是它们。想象一下,如果您的视图控制器大小发生了变化(设备被轮换,或者您的应用程序在分离模式下在iPad上运行,并且用户调整了应用程序的大小) - 那么您将能够看到更多数据。因为标签保留了原始数据,所以一切都会自动发生。如果裁剪数据以匹配其渲染表示,则需要对所有此类更改做出反应并将原始数据重新分配给标签。

提供一个真实世界的例子 - 想象一下你正在看一个巨大的(建筑大小的)广告牌,通过一个小的(让尺寸,信纸大小)窗口。你只能看到广告牌的一部分,但一切都还在那里。以同样的方式,UILabel只是一个"窗口"在提供的数据上。

现在,实施这一点并不是一件轻而易举的事。这样的UIQuantumLabel *需要考虑当前大小的当前字体数据中每个字母/数字/表情符号/字符的宽度(除非您将其限制为等宽字体),请考虑自动字体缩放是否已经发生,以及用户是否减少/增加了设备辅助功能设置中的字体大小,以及可能还有一些因素。

你的用例是什么?为什么要裁剪数据,而不是保留原始数据?

* UIQuantumLabel因为它让我想起了量子力学(至少我记得它),观察物体会改变它状态:)