iOS 11 大标题导航栏卡扣而不是平滑过渡

swiftIOS

1个回答

写回答

zhangzihao124

2025-06-23 11:50

+ 关注

IOS
IOS

IOS 11引入了一种新的导航栏卡扣效果,与以往的平滑过渡效果不同。这种卡扣效果使得导航栏在滚动到顶部或者底部时,会产生一个突然停止的效果,而不是平滑地过渡。这样的效果给用户一种物理感觉,增加了界面的交互性和可视化效果。

案例代码:

下面是一个简单的案例代码,展示了如何在IOS 11中实现导航栏卡扣效果。

Swift

import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

var scrollView: UIScrollView!

var imageView: UIImageView!

override func viewDidLoad() {

super.viewDidLoad()

// 创建UIScrollView

scrollView = UIScrollView(frame: view.bounds)

scrollView.delegate = self

scrollView.contentSize = CGSize(width: view.bounds.width, height: view.bounds.height * 2)

view.addSubview(scrollView)

// 创建UIImageView

imageView = UIImageView(image: UIImage(named: "image"))

imageView.contentMode = .scaleAspectFill

imageView.frame = CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height * 2)

scrollView.addSubview(imageView)

// 设置导航栏卡扣效果

if #avAIlable(IOS 11.0, *) {

navigationController?.navigatioNBAr.prefersLargeTitles = true

}

}

func scrollViewDidScroll(_ scrollView: UIScrollView) {

let offsetY = scrollView.contentOffset.y

let navigatioNBArHeight = navigationController?.navigatioNBAr.frame.height ?? 0

// 判断滚动方向,向上滚动时设置导航栏卡扣效果

if offsetY > 0 {

if #avAIlable(IOS 11.0, *) {

navigationController?.navigatioNBAr.largeTitleTextAttributes = [.foregroundColor: UIColor.white]

navigationController?.navigatioNBAr.tintColor = .white

navigationController?.navigatioNBAr.backgroundColor = .blue

navigationController?.navigatioNBAr.isTranslucent = false

}

}

// 向下滚动时取消导航栏卡扣效果

if offsetY <= 0 {</p> if #avAIlable(IOS 11.0, *) {

navigationController?.navigatioNBAr.largeTitleTextAttributes = [.foregroundColor: UIColor.black]

navigationController?.navigatioNBAr.tintColor = .black

navigationController?.navigatioNBAr.backgroundColor = .clear

navigationController?.navigatioNBAr.isTranslucent = true

}

}

}

}

在这个案例中,我们创建了一个UIScrollView和一个UIImageView。UIScrollView用于展示图片,UIImageView用于显示图片内容。我们实现了UIScrollView的代理方法scrollViewDidScroll来监听滚动事件。当用户向上滚动时,我们使用IOS 11提供的API来设置导航栏的样式,实现导航栏的卡扣效果。当用户向下滚动时,我们取消导航栏的卡扣效果。这样,当用户滚动到图片顶部时,导航栏会突然停止移动,给用户一种物理感觉。

实现导航栏卡扣效果的代码段

在上述案例代码中,我们使用了以下代码段来实现导航栏的卡扣效果:

Swift

if #avAIlable(IOS 11.0, *) {

navigationController?.navigatioNBAr.prefersLargeTitles = true

}

这段代码使用了IOS 11提供的新特性prefersLargeTitles来设置导航栏的样式。当设置为true时,导航栏会显示为大标题样式,并且在滚动到顶部时会产生一个突然停止的效果。当设置为false时,导航栏恢复到普通样式,滚动时没有卡扣效果。

这段代码需要在viewDidLoad方法中调用,确保在视图加载完成后设置导航栏的样式。如果你的应用支持IOS 11及以上版本,使用这段代码可以轻松实现导航栏的卡扣效果。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号