Swift - 滚动时缩小导航栏

7
我在这里卡住了。我想在滚动UITableView时缩小导航栏,再次向上滚动时将其放大。我设法改变了导航栏的大小,但标题图像未与导航栏一起缩小。
我想像Safari一样做,问题是我的TitleView的高度正在缩小,但宽度从未改变。
以下是我用于更改滚动条高度的代码。
func scrollViewDidScroll(scrollView: UIScrollView) {
    var navbar = navigationController?.navigationBar
    var dir:CGPoint = tableview.panGestureRecognizer.translationInView(self.tableview)
    var scrollViewHeight = tableview.frame.size.height
    var scrollContentSizeHeight = tableview.contentSize.height
    var scrollOffset = tableview.contentOffset.y

    if (dir.y > 0 && self.formernavstate == "small") {
        self.formernavstate = "big"

        UIView.animateWithDuration(0.5, delay:0.0, options: UIViewAnimationOptions.AllowAnimatedContent, animations: { () -> Void in

        println("")
        navbar?.frame.origin.y = 20
        self.navigationItem.titleView?.transform = CGAffineTransformMakeScale(0.52, 0.6)
        }, completion: nil)
    }

    if (dir.y < 0 && self.formernavstate == "big") {
        self.formernavstate = "small"   
        navbar?.frame.origin.y = 0
        navigationItem.titleView?.transform = CGAffineTransformMakeScale(0.0001, 0.2)
    }
}
1个回答

2

我按照@chauhan的回答,使用自定义“header”并根据其答案调整高度约束,实现了一个Swift 3版本:

extension ViewController: UIScrollViewDelegate {

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollViewOffset < scrollView.contentOffset.y {
            shrinkHeader(shrink: true)
        } else if scrollViewOffset > scrollView.contentOffset.y {
            shrinkHeader(shrink: false)
        }
    }

    func shrinkHeader(shrink: Bool) {
        if shrink {
            if self.headerContainerHeightConstraint.constant > CGFloat(minHeaderHeight) {
                UIView.animate(withDuration: 0.1, animations: {
                    self.headerContainerHeightConstraint.constant = self.headerContainerHeightConstraint.constant - 2
                    self.view.layoutIfNeeded()
                })
            }
        } else {
            if self.headerContainerHeightConstraint.constant < CGFloat(maxHeaderHeight) {
                UIView.animate(withDuration: 0.1, animations: {
                    self.headerContainerHeightConstraint.constant = self.headerContainerHeightConstraint.constant + 6
                    self.view.layoutIfNeeded()
                })
            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接