Seo*_*oon 38 uinavigationbar ios swift ios11 large-title
我正在尝试在我的新应用程序上实现iOS 11本机大导航栏标题.通过在viewDidLoad()中调用以下函数:
navigationController?.navigationBar.prefersLargeTitles = true navigationController?.navigationItem.largeTitleDisplayMode = .always
但是,当我开始向上滚动时(主视图中的唯一视图是滚动视图),滚动使大标题以比手指实际滚动更快的速度消失.(也就是说,如果我在屏幕上移动2厘米,滚动视图实际滚动超过2厘米,直到大标题收缩到'通常'大小.)
下面是滚动我的应用程序的GIF.我实际上移动很少,它会自动滚动那么多.这与Apple制造的应用程序(例如,应用程序商店,如我的应用程序下方所示)不同.
有没有人有解决这种异常行为的解决方案?
编辑:每个请求,我添加当前的视图层次结构.我的代码中没有任何特殊内容,我只需设置标题和标记即可prefersLargeTitles.
Rom*_*man 38
我用这些约束解决了这个问题:
NSLayoutConstraint.activate([
scrollView.topAnchor.constraint(equalTo: view.topAnchor),
scrollView.leftAnchor.constraint(equalTo: view.leftAnchor),
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
scrollView.rightAnchor.constraint(equalTo: view.rightAnchor)
])
Run Code Online (Sandbox Code Playgroud)
您还必须在UIViewController子类上设置此属性:
extendedLayoutIncludesOpaqueBars = YES
Run Code Online (Sandbox Code Playgroud)
use*_*708 23
我也发现了这个问题.
在Interface Builder中
我已经调试了几天,我找到了一个解决方法.
首先,发生了什么?
这是UIScrollView一个不与该largeTitle表现良好.由于在导航栏变小的同时在滚动视图上向上滚动,因此与实际滚动相比,滚动存在两倍.
我通过故意设置确认了这一点:
scrollView.contentOffset.y = scrollView.contentOffset.y * 0.5
Run Code Online (Sandbox Code Playgroud)
这确实使它按照需要移动.但是,这无法解决问题的整个问题,因为从大导航栏到小导航栏时它并没有产生平滑过渡.您可以尝试以下代码.
if scrollView.contentOffset.y > 0 {
if self.navigationController!.navigationBar.frame.size.height > 44.0 {
scrollView.contentOffset.y = scrollView.contentOffset.y * 0.5
}
}
Run Code Online (Sandbox Code Playgroud)
当你慢慢滚动时,这个工作"没问题",但是当你向下飞行时,它首先行动缓慢(导航高度很大),然后加速.
替代方法
简而言之,您不能使用UIScrollViewiOS 11大导航栏.你应该用UITableViewController.
由于我的视图由UICollectionViews垂直方向上的多个水平展开组成,因此我使用UITableView不同的部分来使用故事板形成UI.如果您使用UITableViewController,它会根据需要执行.
AppStore和所有其他Apple制作的本机应用程序必须这样做.
我发现当导航栏有大标题并且不是半透明时会发生这种情况.如果您使用的是CollectionView或TableView,并且它受限于安全区域或其超级视图,那么它应该为您处理插入.
对于滚动视图,请查看Apple文档,有一些新变量(如contentInsetAdjustmentBehavior)用于iOS 11中引入的安全区域更改:https://developer.apple.com/documentation/uikit/uiscrollview
使导航栏半透明
在viewDidLoad()中,尝试添加:
navigationController?.navigationBar.isTranslucent = true
Run Code Online (Sandbox Code Playgroud)
或者在IB中设置此复选标记:
小智 6
双倍速度的问题可能是您的视图大小小于导航控制器的视图大小,并且您拥有类似的视图层次结构(可以在视图调试器中检查它)
V:|-[navbar]-[view]-|
因此,在滚动时,更改内容偏移量时视图的框架会发生变化,并且速度会加倍。
extendedLayoutIncludesOpaqueBars = true 应该有所帮助。
小智 5
首先,确保 scrollView 的顶部约束的第二项等于Superview.Top,而不是Safe Area。
其次,这一行添加到您的视图控制器:extendedLayoutIncludesOpaqueBars = true。例如在viewDidLoad.
| 归档时间: |
|
| 查看次数: |
10204 次 |
| 最近记录: |