ios - Swift - 滚动时缩小导航栏

标签 ios swift uinavigationcontroller navbar uinavigationitem

我真的被困在这里了。我想在向下滚动 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)
    }
}

最佳答案

我实现了一个带有自定义“标题”的 Swift 3 版本,并根据@chauhan 的回答调整了它的高度限制:

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()
                })
            }
        }
    }
}

关于ios - Swift - 滚动时缩小导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30053531/

相关文章:

ios - 隐藏另一个类的自定义按钮

ios - 放大 UITextField

ios - 有没有办法普遍隐藏 UINavigationBar 后退按钮上的文本?

objective-c - 2 单个 View 上的 TableView

arrays - 如何将整数数组映射为字典值的键

ios - 可以在 xcode 项目文件中使用 faSTLane 命令配置 Jenkins 管道

string - NSDateFormatter.dateFromString 向 NSDate 返回 nil ("yyyy-MM-dd")

swift - 不能下标 pfobject 类型的值

ios - 在设备屏幕上运行时不会出现填充屏幕

ios - Cocoapods 和 Xcode,ld : library not found for -lAFNetworking