julia_v's answer幾乎是正確的。您還應該從rect.origin.x中刪除searchButtonWidth以將回調抵消掉。
而且我還增加了一些邏輯,只在需要時才製作這些「技巧」。
override func select(withFrame rect: NSRect, in controlView: NSView, editor textObj: NSText, delegate: Any?, start selStart: Int, length selLength: Int) {
var newRect = rect
if !isBordered || isBezeled {
let cancelButtonWidth = NSWidth(cancelButtonRect(forBounds: rect))
let searchButtonWidth = NSWidth(searchButtonRect(forBounds: rect))
newRect.size.width -= (cancelButtonWidth + searchButtonWidth)
newRect.origin.x += searchButtonWidth
}
super.select(withFrame: newRect, in: controlView, editor: textObj, delegate: delegate, start: selStart, length: selLength)
}
創建子後只需將其設置爲在IB身份檢查NSSearchFieldCell實例。
謝謝,這個伎倆! –