自定义导航栏上的阴影按钮项目剪切到边界

时间:2018-04-18 15:48:47

标签: ios swift uinavigationbar uibarbuttonitem

我的导航栏上有一个我想要使用的后退按钮项目,包括一个阴影,但是阴影剪辑到导航栏边界。阴影是否可能超出导航栏的范围?

我已经简化并夸大了这个例子中的效果: enter image description here

按钮的代码如下所示:

    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,但希望有人知道更理想的解决方案。

1 个答案:

答案 0 :(得分:2)

虽然我不认为在导航栏中添加这样的阴影是个好主意,但是如果你愿意,可以在视图控制器中添加以下代码,它应该可以工作。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    self.navigationController?.navigationBar.subviews.forEach {
        $0.clipsToBounds = false
    }
}