Swift - 滚动时缩小导航栏
Posted
技术标签:
【中文标题】Swift - 滚动时缩小导航栏【英文标题】:Swift - Shrink Navigation Bar on scroll 【发布时间】:2015-05-05 12:51:42 【问题描述】:我真的被困在这里了。我想在向下滚动 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】:我实现了一个带有自定义“标题”的 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()
)
【讨论】:
以上是关于Swift - 滚动时缩小导航栏的主要内容,如果未能解决你的问题,请参考以下文章