确定式旋转NSProgressIndicator无法适配帧尺寸遭截断问题排查
问题分析与解决
你遇到的问题是确定式旋转进度指示器(isIndeterminate=false)在小尺寸下被截断,而不确定式正常显示,核心原因如下:
当NSProgressIndicator设置为确定式+spinning样式时,系统为该组合设定了最小尺寸限制(官方默认最小尺寸为32x32),你前两个确定式指示器的尺寸(16x16、24x24)小于这个限制,导致控件内容被截断;而不确定式的spinning样式没有这个最小尺寸约束,因此能正常适配小尺寸。
解决方法
方法1:使用符合最小尺寸的大小
直接将确定式指示器的尺寸设置为不小于32x32,即可正常显示:
// 将16x16的确定式改为32x32 progress = NSProgressIndicator(frame: CGRect(x: 150, y: 0, width: 32, height: 32)) progress.style = .spinning progress.isIndeterminate = false progress.doubleValue = 50 progress.maxValue = 100 view.addSubview(progress)
方法2:改用条形样式(适合小尺寸场景)
如果必须用小尺寸展示确定进度,建议将样式改为.bar,条形进度条没有旋转样式的最小尺寸限制:
progress = NSProgressIndicator(frame: CGRect(x: 150, y: 0, width: 16, height: 16)) progress.style = .bar // 替换为条形样式 progress.isIndeterminate = false progress.doubleValue = 50 progress.maxValue = 100 view.addSubview(progress)
方法3:调整控件尺寸配合controlSize(可选)
通过设置controlSize匹配自定义尺寸,让系统自动适配控件内容:
progress = NSProgressIndicator(frame: CGRect(x: 150, y: 0, width: 16, height: 16)) progress.style = .spinning progress.isIndeterminate = false progress.controlSize = .small // 对应小尺寸设定 progress.doubleValue = 50 progress.maxValue = 100 view.addSubview(progress)
内容的提问来源于stack exchange,提问作者Nickkk
相关产品推荐
相关产品推荐

