macOS:无法在基于自定义 NSView 的类中居中 NSTextField
Posted
技术标签:
【中文标题】macOS:无法在基于自定义 NSView 的类中居中 NSTextField【英文标题】:macOS: Cannot center NSTextField inside custom NSView based class 【发布时间】:2019-06-26 05:12:24 【问题描述】:我正在使用此代码创建一个基于 NSView 的自定义类。
import Foundation
import AppKit
@IBDesignable
class MacBotaoMudaDeCor : NSView
lazy var etiqueta: NSTextField =
let etiquetax = NSTextField()
etiquetax.textColor = corLigada
let xConstraint = NSLayoutConstraint(item: etiquetax,
attribute: .centerX,
relatedBy: .equal,
toItem: self,
attribute: .centerX,
multiplier: 1,
constant: 0)
let yConstraint = NSLayoutConstraint(item: etiquetax,
attribute: .centerY,
relatedBy: .equal,
toItem: self,
attribute: .centerX,
multiplier: 1,
constant: 0)
self.addConstraint(xConstraint)
self.addConstraint(yConstraint)
etiquetax.integerValue = self.numeroBotao
etiquetax.sizeToFit()
self.addSubview(etiquetax)
return etiquetax
()
// creates a CALayer() and sets it to the layer property of the view
var mainLayer: CALayer
get
if layer == nil
layer = CALayer()
return layer!
@IBInspectable var cornerRadius: CGFloat = 0
didSet
mainLayer.cornerRadius = cornerRadius
mainLayer.masksToBounds = cornerRadius > 0
@IBInspectable var borderWidth: CGFloat = 0
didSet
mainLayer.borderWidth = borderWidth
@IBInspectable var borderColor: NSColor?
didSet
mainLayer.borderColor = borderColor?.cgColor
@IBInspectable var corDesligada: NSColor = NSColor.white
@IBInspectable var corLigada: NSColor = NSColor.black
@IBInspectable var ligado: Bool = false
didSet
self.ajustar(corFundo: ligado ? self.corLigada : self.corDesligada)
@IBInspectable var numeroBotao: Int = 0
didSet
etiqueta.integerValue = numeroBotao
override init(frame frameRect: NSRect)
super.init(frame: frameRect)
self.ajustar(corFundo: corDesligada)
self.ajustar(corEtiqueta: corLigada)
required init?(coder decoder: NSCoder)
super.init(coder: decoder)
self.ajustar(corFundo: corDesligada)
self.ajustar(corEtiqueta: corLigada)
override func awakeFromNib()
self.ajustar(corFundo: corDesligada)
self.ajustar(corEtiqueta: corLigada)
func ajustar(corFundo:NSColor)
mainLayer.backgroundColor = corFundo.cgColor
func ajustar(corEtiqueta:NSColor)
etiqueta.textColor = corLigada
这个想法是让一个 NSTextField 以此类表示的视图为中心。
Xcode 在尝试使用此消息安装约束时崩溃。
2019-06-26 06:08:42.341770+0100 设置失败(contentViewController) (NSWindow)上的用户定义检查属性:约束不当 关联不兼容类型的锚:
【问题讨论】:
【参考方案1】:addConstraint(_:)
:
约束必须只涉及接收视图范围内的视图。
在添加约束之前添加视图。
【讨论】:
Apple 应该从 Xcode 团队中解雇撒旦,并聘请能写出体面错误消息的人。以上是关于macOS:无法在基于自定义 NSView 的类中居中 NSTextField的主要内容,如果未能解决你的问题,请参考以下文章
无法关闭在 Interface Builder 中创建的 NSView 实例的剪辑