You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS 26.0+ 原生玻璃效果UIButton指定圆角设置失效的解决方案咨询

iOS 26.0+ 原生玻璃效果UIButton指定圆角设置失效的解决方案咨询

问题回顾:
在iOS <26.0版本中按钮圆角设置正常,但升级到iOS 26.0后,使用原生clearGlass()配置的UIButton无法正确应用指定的5pt圆角和仅顶部两个圆角的设置,每次都显示为全圆角。严格使用UIKit,不考虑UIVisualEffectView。原代码中尝试同时配置UIButton.Configuration和layer的圆角属性,但结果不符合预期。


问题定位

在iOS 26.0+中,使用UIButton.Configuration.clearGlass()创建的玻璃效果按钮,其背景样式由Configuration体系独立管理,和传统的layer圆角设置存在核心冲突:

  1. 直接设置layer.cornerRadiuslayer.maskedCorners会被Configuration的背景绘制逻辑覆盖,导致仅全圆角生效;
  2. 原代码中同时混合使用两种机制,互相干扰后出现不符合预期的圆角效果;
  3. 玻璃效果的实现依赖layer不裁剪子视图,设置layer.masksToBounds = true还会破坏毛玻璃的视觉表现。

解决方案(UIKit纯适配)

针对iOS 26.0+的玻璃效果按钮,我们需要完全通过UIButton.Configuration的原生API来设置圆角和指定圆角角落,放弃使用layer的相关属性;iOS <26.0版本继续保留原有的layer设置逻辑即可。

修改后的完整代码如下:

// 配置最大化按钮
if #available(iOS 26.0, *) {
    var config = UIButton.Configuration.clearGlass()
    // 配置全局圆角半径
    config.background.cornerRadius = 5
    // 仅指定顶部两个圆角(枚举值和layer.maskedCorners完全一致)
    config.background.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
    btnMaximise.configuration = config
} else {
    btnMaximise.backgroundColor = .white
    // 低版本仍使用layer设置圆角
    btnMaximise.layer.cornerRadius = 5
    btnMaximise.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
    btnMaximise.layer.masksToBounds = true
}
btnMaximise.addTarget(self, action: #selector(didTapMaximise), for: .touchUpInside)

// 配置最小化按钮
if #available(iOS 26.0, *) {
    var config = UIButton.Configuration.clearGlass()
    config.background.cornerRadius = 5
    config.background.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
    btnMinimise.configuration = config
} else {
    btnMinimise.backgroundColor = .white
    btnMinimise.layer.cornerRadius = 5
    btnMinimise.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
    btnMinimise.layer.masksToBounds = true
}
btnMinimise.addTarget(self, action: #selector(didTapMinimise), for: .touchUpInside)

关键修改说明

  1. iOS 26.0+分支核心调整

    • 新增config.background.maskedCorners配置:iOS 26.0为UIButton.Configuration.Background新增了该属性,可直接指定需要圆角的角落,枚举值和CALayermaskedCorners完全兼容;
    • 移除所有layer相关圆角设置:避免和Configuration的背景逻辑冲突,同时保留玻璃效果的完整性;
    • 无需设置layer.masksToBounds = true:玻璃效果依赖layer不裁剪子视图来实现模糊扩散,该属性会破坏毛玻璃视觉。
  2. 低版本兼容
    保留原有的layer圆角设置逻辑,确保iOS <26.0版本的按钮样式和之前一致。


额外优化提示

如果需要自定义玻璃效果的模糊强度或色调,可在Configuration中扩展设置:

if #available(iOS 26.0, *) {
    var config = UIButton.Configuration.clearGlass()
    // 自定义模糊风格
    config.background.effect = UIBlurEffect(style: .light)
    config.background.cornerRadius = 5
    config.background.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
    btnMaximise.configuration = config
}

火山引擎 最新活动