【swift】macOS应用中如何创建一个label

【swift】macOS应用中如何创建一个label_第1张图片
博主: 漫画无聊的冰块

Label是开发中相当常见的一种UI控件。在iOS和tvOS中,这个控件都叫 UILabel 。有个很奇怪的点,在macOS中没有这个控件,而是用一个 NSTextField 来代替。

按惯例,我们先简单写个demo对比一下这两种写法:

import UIKit

// iOS or tvOS
let label = UILabel()
label.frame = CGRect(origin: .zero, size: CGSize(width: 100, height: 44))
label.text = "My awesome label"
label.backgroundColor = .white
label.sizeToFit()

这里没啥好说的,初始化label,设frame、文案、颜色,自适应大小。一般开发中,我们不用调用sizeToFit,除非要精确的计算控件尺寸、位置。我一般都根据控件优先级设定约束来进行布局。

说完ios/tvOS平台,我们进入重点,看看macOS下是如何实现:

import Cocoa

// macOS
let label = NSTextField()
label.frame = CGRect(origin: .zero, size: CGSize(width: 100, height: 44))
label.stringValue = "My awesome label"
label.backgroundColor = .white
label.isBezeled = false
label.isEditable = false
label.sizeToFit()

我们首先创建一个NSTextField控件并且设定一个frame。然后添加text,NSTextField没有像UILable一样提供一个text属性,而是要设定一个stringValuestringValue属性不是NSTextField中声明的,而是继承自NSControl中。NSControl还有类似的其他属性,比如doubleValuefloatValueintValue等等。这个最好注意一下,其他继承自NSControl的类也有这些属性。如果需要从NSTextField中取text,也要从这个属性来取。

接下来是设定背景颜色,如果你记得NSView实现的方式,你会发现一丢丢细微的不同。NSView中通过layer来设置CGColor类型的颜色。NSTextField中直接声明了一个backgroundColor属性,类型为NSColor。并且在NSTextField中,通过layer设置背景颜色是无效的。

sizeToFit方法是可以让label展示,但是和我们预想的有一丝丝的差异。如果我们不需要外面的框线,我们可以设置isBezeled属性为false。最后记住,想更像UILable而不是NSTextField,把isEditable属性设为false

以上,Have Fun .

参考链接:
How to make a label in macOS

你可能感兴趣的:(【swift】macOS应用中如何创建一个label)