You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS自定义Numpad设置cornerRadius后出现灰色背景问题求助

自定义Numpad键盘圆角区域灰色背景问题

我通过XIB创建了一个自定义Numpad键盘,希望初始化时设置圆角,使用的代码如下:

import UIKit

class NumpadView: UIView {

@IBOutlet weak var resetButton: NumpadButton!
@IBOutlet weak var decimalButton: NumpadButton!

var target: UITextInput?
var view: UIView?

init(target: UITextInput, view: UIView) {
    super.init(frame: .zero)
    self.target = target
    self.view = view
    initializeSubview()
}

required init?(coder: NSCoder) {
    super.init(coder: coder)
    initializeSubview()
}

func initializeSubview() {
    let xibFileName = "NumpadView"
    let view = Bundle.main.loadNibNamed(xibFileName, owner: self, options: nil)![0] as! UIView
    self.layer.cornerRadius = 30
    self.layer.masksToBounds = true
    self.addSubview(view)
    view.frame = self.bounds
    self.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}
}

设置后圆角区域出现奇怪的灰色背景,通过视图调试发现灰色层是UICompatibilityInputViewController。我通过textField.inputView设置自定义NumpadView来展示键盘,请问如何去除圆角附近的灰色背景?


解决方法

方案一:调整圆角层级并透明容器视图

问题根源是NumpadView作为容器,默认背景色不透明,系统的UICompatibilityInputViewController背景会透过圆角区域显露。只需修改两点:

  1. 将NumpadView本身背景色设为透明
  2. 把圆角属性应用到XIB加载出的根视图上,而非容器视图

修改initializeSubview方法:

func initializeSubview() {
    let xibFileName = "NumpadView"
    let view = Bundle.main.loadNibNamed(xibFileName, owner: self, options: nil)![0] as! UIView
    // 容器视图设为透明,避免透出系统层背景
    self.backgroundColor = .clear
    // 把圆角设置在XIB的根视图上
    view.layer.cornerRadius = 30
    view.layer.masksToBounds = true
    self.addSubview(view)
    view.frame = self.bounds
    view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}

方案二:确认XIB根视图设置

检查XIB文件中根视图的背景色是否为你需要的颜色,同时确保根视图的clipsToBounds属性已开启(对应代码中的layer.masksToBounds = true),这样圆角区域就不会透出下层的灰色背景。


内容的提问来源于stack exchange,提问作者artexhibit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 10:15:36