登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [macos/appkit/ios/uikit]macos是没有单独的 label 类的要用NSTextField     [回主站]     [分站链接]
[macos/appkit/ios/uikit]macos是没有单独的 label 类的要用NSTextField
clq
浏览(63) - 2024-02-23 15:34:38 发表 编辑

关键字:

[macos/appkit/ios/uikit]macos是没有单独的 label 类的要用NSTextField

https://www.jianshu.com/p/a502b6189a28

--------------------------------------------------------
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属性,而是要设定一个stringValue。stringValue属性不是NSTextField中声明的,而是继承自NSControl中。NSControl还有类似的其他属性,比如doubleValue, floatValue, intValue等等。这个最好注意一下,其他继承自NSControl的类也有这些属性。如果需要从NSTextField中取text,也要从这个属性来取。

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

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


总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
appkit 更多
appkit的坑 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1