Mac开发求助:Stackview无法跟随NSView自动调整大小
约束StackView的尺寸与父视图绑定
把StackView的leading、trailing、top、bottom约束和窗口的contentView绑定,同时设置你需要的宽高乘数(比如0.5)。关键是调低StackView的内容拥抱优先级(Content Hugging Priority)和内容压缩抵抗优先级(Content Compression Resistance Priority):在Storyboard的Size Inspector里,把这两个属性的Horizontal和Vertical值都设得比默认值低一点(比如拥抱设250,抵抗设749),让StackView优先服从父视图的约束,而不是被内部ImageView的尺寸撑大。处理内部ImageView的约束
给每个ImageView设置合适的content mode(比如Aspect Fit或Scale To Fill),确保图片能随ImageView大小缩放。同时把ImageView的内容拥抱优先级设得比StackView高(比如251),让ImageView在StackView的限制内保持自身比例,不会反过来撑大StackView。如果需要固定图片比例,也可以给ImageView添加宽高比约束。调整窗口尺寸限制
在窗口的属性面板里设置合理的最小、最大尺寸,避免窗口被拉得过大或缩得过小,同时确保窗口初始的Content Size是合适的,让StackView一开始就能正确适配。代码层面的补充(若不用Storyboard)
用代码创建约束时,示例如下:// 绑定StackView与父视图约束 stackView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ stackView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), stackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, multiplier: 0.5), stackView.topAnchor.constraint(equalTo: contentView.topAnchor), stackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), ]) // 调整优先级 stackView.setContentHuggingPriority(.defaultLow, for: .horizontal) stackView.setContentHuggingPriority(.defaultLow, for: .vertical) stackView.setContentCompressionResistancePriority(.defaultHigh - 1, for: .horizontal) stackView.setContentCompressionResistancePriority(.defaultHigh - 1, for: .vertical) // 设置ImageView的content mode imageView.contentMode = .aspectFit
内容的提问来源于stack exchange,提问作者BROWN TOM

