【问题标题】:How to only show a a shadow under navigation bar once user beings scrolling?一旦用户滚动,如何只在导航栏下显示阴影?
【发布时间】:2019-07-01 20:10:29
【问题描述】:

基本上,一旦用户开始滚动,我想在导航栏下方启用阴影半径。导航栏位于 TableView 控制器中,当视图控制器第一次打开时,导航控制器应该处于正常状态,但一旦用户开始滚动,就会出现阴影。

以下是我目前用于在导航栏下方创建阴影的代码:

    //Adds Shadow below navigation bar
    self.navigationController?.navigationBar.layer.masksToBounds = false
    self.navigationController?.navigationBar.layer.shadowColor = UIColor.lightGray.cgColor
    self.navigationController?.navigationBar.layer.shadowOpacity = 0.8
    self.navigationController?.navigationBar.layer.shadowOffset = CGSize(width: 0, height: 2.0)
    self.navigationController?.navigationBar.layer.shadowRadius = 2

如何才能在用户开始滚动时才启用?

【问题讨论】:

标签: ios swift uinavigationbar


【解决方案1】:

您需要添加这些行以向函数显示阴影并从以下委托方法调用该函数:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

另外,调用与你的 showShadow 函数相反的函数可能会有所帮助,这将删除以下委托方法中的阴影:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;

【讨论】:

    【解决方案2】:

    将此添加到您的视图控制器:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.navigationController?.navigationBar.layer.masksToBounds = false
        self.navigationController?.navigationBar.layer.shadowColor = UIColor.lightGray.cgColor
        self.navigationController?.navigationBar.layer.shadowOpacity = 0
        self.navigationController?.navigationBar.layer.shadowOffset = CGSize(width: 0, height: 2.0)
        self.navigationController?.navigationBar.layer.shadowRadius = 2
    }
    
    
    override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    
        self.navigationController?.navigationBar.layer.shadowOpacity = 0.8
    }
    

    如果您想在滚动停止时移除阴影,您可以在此方法中将值重置为正常:

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    
        self.navigationController?.navigationBar.layer.shadowOpacity = 0
    
    }
    

    当用户拖动 TableView 而不是滚动时,您可能也想这样做,在这种情况下,也添加这两个:

    override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    
        self.navigationController?.navigationBar.layer.shadowOpacity = 0.8
    
    }
    
    override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    
        self.navigationController?.navigationBar.layer.shadowOpacity = 0
    
    }
    

    【讨论】:

      【解决方案3】:

      只要有问题的滚动视图是第一个子视图,或者如果您将滚动视图传递给setContentScrollView() in iOS 15+,导航栏就会自动显示阴影。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-18
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多