iOS Swift项目中Material Design按钮不显示及触摸目标异常求助
问题排查与解决方案
你的代码里有两个核心问题导致了当前的现象,我来一步步拆解并给出修复方案:
1. 按钮未显示的原因
你创建了MDCFloatingButton并添加到视图上,但没有给按钮设置任何布局约束或frame。默认情况下,这个按钮的尺寸是(0, 0, 0, 0),所以屏幕上完全看不到它。
2. 触摸目标尺寸报错的原因
点击空白区域时出现的报错,是因为按钮本身的尺寸远小于Material Design要求的最小触摸目标尺寸48x48。即使按钮看不见,它的触摸目标仍存在,但尺寸不符合规范,因此触发了警告。
正确的实现代码
下面是修复后的完整代码,我标注了关键修改点:
class FloatingButtonController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let floatingButton = MDCFloatingButton() floatingButton.setImage(UIImage(named: "plus"), for: .normal) floatingButton.backgroundColor = .white floatingButton.setElevation(ShadowElevation(rawValue: 6), for: .normal) floatingButton.addTarget(self, action: #selector(btnFloatingButtonTapped(floatingButton:)), for: .touchUpInside) // 关键修改1:允许按钮使用Auto Layout floatingButton.translatesAutoresizingMaskIntoConstraints = false self.view.addSubview(floatingButton) // 关键修改2:给按钮添加布局约束,设置标准尺寸并固定到屏幕右下角 NSLayoutConstraint.activate([ floatingButton.widthAnchor.constraint(equalToConstant: 56), // Material Design推荐的FAB标准尺寸 floatingButton.heightAnchor.constraint(equalToConstant: 56), floatingButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20), floatingButton.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -20) ]) // 可选:如果图标尺寸过小,设置图片适配模式 floatingButton.imageView?.contentMode = .scaleAspectFit } @objc func btnFloatingButtonTapped(floatingButton: MDCFloatingButton){ floatingButton.collapse(true) { floatingButton.expand(true, completion: nil) } } }
额外说明
- 设置按钮尺寸为
56x56是Material Design官方推荐的悬浮操作按钮(FAB)标准尺寸,这个尺寸本身就大于48x48的最小触摸目标要求,所以不会再触发触摸目标的警告。 - 使用Auto Layout固定按钮位置,能更好地适配不同尺寸的屏幕,比直接设置
frame更灵活可靠。
内容的提问来源于stack exchange,提问作者Alex Kirov
相关产品推荐
相关产品推荐

