我的导航栏上有一个我想要使用的后退按钮项目,包括一个阴影,但是阴影剪辑到导航栏边界。阴影是否可能超出导航栏的范围?
按钮的代码如下所示:
let button = UIButton();
button.layer.shadowOffset = CGSize(width: 0, height: 12);
button.layer.shadowColor = UIColor(red: 0.06, green: 0.09, blue: 0.13, alpha: 0.8).cgColor;
button.layer.shadowOpacity = 1;
button.layer.shadowRadius = 14;
button.backgroundColor = UIColor(red:0, green:0.65, blue:0.57, alpha:1);
button.layer.cornerRadius = 20;
button.translatesAutoresizingMaskIntoConstraints = false;
button.widthAnchor.constraint(equalToConstant: 40).isActive = true;
button.heightAnchor.constraint(equalToConstant: 40).isActive = true;
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: button);
我还使用以下代码将导航栏设置为透明:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default);
self.navigationController?.navigationBar.shadowImage = UIImage();
self.navigationController?.navigationBar.isTranslucent = true;
我已经尝试在navigationBar上将clipsToBounds和layer.masksToBounds设置为false,但这并没有解决问题。我认为我可能只是增加了navigationBar的大小并重新定位按钮,因此阴影不会剪切statusBar,但希望有人知道更理想的解决方案。
答案 0 :(得分:2)
虽然我不认为在导航栏中添加这样的阴影是个好主意,但是如果你愿意,可以在视图控制器中添加以下代码,它应该可以工作。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.navigationController?.navigationBar.subviews.forEach {
$0.clipsToBounds = false
}
}