macOS中NSWindow框架实际类型及窗口尺寸最小调整单位问询
macOS NSWindow 尺寸调整与坐标类型解析
关于NSWindow尺寸/位置的最小有效调整单位
- 你观察到的情况完全正确:NSWindow的框架参数最终会被系统转换为整数值,所以设置500.1这类非整数尺寸不会产生任何变化,系统会自动将其取整。
- 这里的“1个整数单位”并不直接等同于物理像素,而是和屏幕的backing缩放因子挂钩。比如Retina屏幕的缩放因子为2,此时1个逻辑单位对应2个物理像素;非Retina屏幕缩放因子为1,才对应1个物理像素。系统这么做是为了让窗口始终对齐到像素边界,避免半像素渲染导致的模糊问题。
- 简单来说,窗口尺寸和位置的最小调整步长是1个逻辑单位,而非物理像素,具体对应多少物理像素要看当前屏幕的缩放比例。
macOS窗口框架的真实处理类型
- 虽然我们在代码里用
CGRect(包含CGFloat类型的origin和size)来配置窗口框架,但NSWindow内部会把这些值转换为整数类型的逻辑单位来处理。这是因为macOS的窗口服务器(WindowServer)在管理窗口位置和尺寸时,是以逻辑单位的整数来对齐的,核心目的是保证界面渲染的清晰度。 - 底层实现层面,窗口的位置和尺寸最终会被转成
NSInteger类型的数值,所以任何非整数的设置都会被系统自动取整(具体是四舍五入还是截断取决于系统版本,但结果都是整数值)。
内容的提问来源于stack exchange,提问作者swiftPunk
相关产品推荐
相关产品推荐

