NSView 对齐在 Xcode 16.0 中无法正常工作

问题描述 投票:0回答:1

我使用的是 macOS 15.0.1 并使用 Xcode 16.0,这打破了我现有应用程序中的 NSView 对齐。主要问题是,子级

NSView
NSView
中获取与父级
override func draw(_ dirtyRect: NSRect)
一样的帧大小,而不是
100:100

我将 Swift 语言版本 6 从 5 个相同问题更改为 6。我也创建了新项目,但新旧项目中存在同样的问题。仅当使用

func draw(_ dirtyRect: NSRect)
时才会出现问题,如果我在子视图中使用
wantsLayer=true
而不是
draw(_ dirtyRect: NSRect)
则效果很好。 `

如何解决?

private class ViewA: NSView {
    
    override func draw(_ dirtyRect: NSRect) {
        
        print("ViewA: \(dirtyRect)")
        
        NSColor.systemBlue.set()
        dirtyRect.fill()
    }
}

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
 
        view.wantsLayer = true
        view.layer?.backgroundColor = NSColor.white.cgColor
        
        let v1 = ViewA()
        view.addSubview(v1)
        v1.translatesAutoresizingMaskIntoConstraints = false
        
        NSLayoutConstraint.activate([
            
            v1.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            v1.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            v1.heightAnchor.constraint(equalToConstant: 100),
            v1.widthAnchor.constraint(equalToConstant: 100)
        ])
    }
    
    override func viewDidLayout() {
        super.viewDidLayout()
        
        print("VC.view = \(view.frame)")
    }
}

电流输出:

enter image description here

预期输出:

let v1 = NSView()
v1.wantsLayer = true
v1.layer?.backgroundColor = NSColor.systemBlue.cgColor

enter image description here

swift cocoa swift6 macos-sequoia
1个回答
0
投票

正如@Willeke在评论中所说,解决方案是制作剪辑

clipToBounds=true
。如果有任何未按预期工作但以前可以工作的内容,最好查看 AppKit 发行说明

© www.soinside.com 2019 - 2024. All rights reserved.