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背景会透过圆角区域显露。只需修改两点:
- 将
NumpadView本身背景色设为透明 - 把圆角属性应用到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
相关产品推荐
相关产品推荐

