标签: large-title

iOS 11大导航栏标题意外速度

我正在尝试在我的新应用程序上实现iOS 11本机大导航栏标题.通过在viewDidLoad()中调用以下函数:

navigationController?.navigationBar.prefersLargeTitles = true navigationController?.navigationItem.largeTitleDisplayMode = .always

我得到了我想要的东西. 在此输入图像描述

但是,当我开始向上滚动时(主视图中的唯一视图是滚动视图),滚动使大标题以比手指实际滚动更快的速度消失.(也就是说,如果我在屏幕上移动2厘米,滚动视图实际滚动超过2厘米,直到大标题收缩到'通常'大小.)

下面是滚动我的应用程序的GIF.我实际上移动很少,它会自动滚动那么多.这与Apple制造的应用程序(例如,应用程序商店,如我的应用程序下方所示)不同.

有没有人有解决这种异常行为的解决方案?

在此输入图像描述

在此输入图像描述

编辑:每个请求,我添加当前的视图层次结构.我的代码中没有任何特殊内容,我只需设置标题和标记即可prefersLargeTitles.

在此输入图像描述

uinavigationbar ios swift ios11 large-title

38
推荐指数
6
解决办法
1万
查看次数

带有大标题iOS 11的导航栏的图像

AppStore应用程序在NabBar右侧有一个带有大标题图像的图标: 在此输入图像描述

如果有人知道如何实现它或如何做的想法,真的很感激.

顺便说一句:在UIBarButtonItem中为UIButton设置图像将不起作用.已经尝试过.按钮贴在屏幕顶部: 在此输入图像描述

xcode navigationbar swift ios11 large-title

16
推荐指数
1
解决办法
6670
查看次数

如何在导航栏中设置多行大标题?(iOS 11的新功能)

我正在其中一个应用程序中的导航栏中添加大标题.问题是标题有点长,所以我需要在大标题中添加两行.如何在导航栏中添加两行大标题

这不是关于默认导航栏标题!这是关于iOS 11中引入的大标题.因此,请务必考虑大型标题来添加建议.谢谢

在此输入图像描述

uinavigationbar uilabel ios swift large-title

14
推荐指数
2
解决办法
7728
查看次数

在导航栏中显示搜索栏和大标题也无需在 iOS 13 上滚动

我附加UISearchControllernavigationItem.searchControlleriOS上13这个工作得很好:我可以用最好的iOS的13式搜索栏。

但是,我希望默认情况下看到大标题和搜索栏。

我设置navigationItem.hidesSearchBarWhenScrolling = false是因为我想在我的屏幕上永久看到搜索,但默认情况下搜索栏会替换大标题。

有谁知道这怎么可能?

看一下这个

navigationItem.searchController = UISearchController(searchResultsController: nil)
navigationItem.hidesSearchBarWhenScrolling = false
Run Code Online (Sandbox Code Playgroud)

这是它的实际外观 这是它的实际外观

这就是我需要实现的方式(大标题和搜索栏都可见) 这就是我需要实现的方式(大标题和搜索栏都可见)

uisearchcontroller large-title preferslargetitles ios13

13
推荐指数
1
解决办法
5106
查看次数

断言失败 - [UITableView _addScrollViewScrollObserver:]同时使用大标题导航ios 11

我有带有视图控制器的标签栏控制器,其中只有一个表视图.

我使用代码设置导航栏大标题:

if (@available(iOS 11.0, *)) {
        [[UINavigationBar appearance] setPrefersLargeTitles:YES];
    } else {
        // Fallback on earlier versions
    }
Run Code Online (Sandbox Code Playgroud)

当我第二次打开标签时,它正在崩溃应用程序.或随机移动标签以及以下消息.

错误消息如下所示:

Assertion failure in -[UITableView _addScrollViewScrollObserver:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3694.4.18/UIScrollView.m:7693
Run Code Online (Sandbox Code Playgroud)

任何解决问题的想法.谢谢.

uitabbarcontroller uitableview uiappearance ios11 large-title

9
推荐指数
1
解决办法
431
查看次数

多行导航栏标题在 iOS13 上被截断

我有一个视图控制器,我需要在导航栏上显示多行标题。为此,我写了一个这样的协议 -

import UIKit

protocol CustomNavigationBar {
    func setupNavigationMultilineTitle(titleText: String, prefersLargeTitles: Bool, largeTitleDisplayMode: UINavigationItem.LargeTitleDisplayMode)
}
Run Code Online (Sandbox Code Playgroud)

然后扩展它——

extension CustomNavigationBar where Self : UIViewController {

    func setupNavigationMultilineTitle(titleText: String, prefersLargeTitles: Bool = true, largeTitleDisplayMode: UINavigationItem.LargeTitleDisplayMode = .automatic ) {

        self.navigationController?.navigationBar.prefersLargeTitles = prefersLargeTitles
        self.navigationController?.navigationItem.largeTitleDisplayMode = largeTitleDisplayMode
        self.navigationController?.navigationBar.largeTitleTextAttributes = [
            NSAttributedString.Key.foregroundColor: UIColor.black,
            NSAttributedString.Key.font: UIFont.systemFont(ofSize: 18, weight: .semibold)
        ]
        self.title = titleText

        if let navBarSubViews = self.navigationController?.navigationBar.subviews {
            for navItem in navBarSubViews {
                for itemSubView in navItem.subviews {
                    if let largeLabel = itemSubView as? UILabel { …
Run Code Online (Sandbox Code Playgroud)

uinavigationbar ios large-title preferslargetitles ios13

8
推荐指数
0
解决办法
732
查看次数

有没有办法改变iOS大标题的左边距?

我想知道是否有任何方法可以更改 iOS 大标题左边距属性。我试图在网上找到它的答案,但我没有成功。


额外问题:项目和屏幕水平边之间的默认边距是 15 吗?我问这个的原因是因为我试图将大标题与我的应用程序的其余元素对齐,屏幕左/右边缘有 15 个。

谢谢 :)

ios large-title preferslargetitles

6
推荐指数
1
解决办法
1538
查看次数

iOS 11中UINavigationBar Large Title的默认字体?

我知道如何设置颜色并更改iOS 11中大标题的字体,但我很难找到大标题的默认字体和字体大小.我想在应用程序的其他地方重现该字体.我尝试了以下但是它们没有给出字体或字体大小的结果.不确定我应该在哪里寻找这个.

NSLog(@"self.navigationController.navigationBar.largeTitleTextAttributes:%@",self.navigationController.navigationBar.largeTitleTextAttributes);

NSDictionary *dict = self.navigationController.navigationBar.largeTitleTextAttributes;
UIFont *font = [dict objectForKey:@"NSFontAttributeName"];
NSLog(@"font is.. %@, %@, %@",font,font.fontName,font.fontDescriptor);
Run Code Online (Sandbox Code Playgroud)

fonts ios ios11 large-title

5
推荐指数
3
解决办法
6515
查看次数

使用大型标题时,iOS 11滚动到顶部无法正常工作

当使用大标题和攻丝状态栏滚动到顶部UIScrollViewUITableView(也可能UICollectionView,没有测试),它总是过得有点过分.

我已启用刷新功能TableView,当点击状态栏时,它会显示为这样,并保持这种状态直到我点击屏幕.

在此输入图像描述

我有一个ScrollView在另一个ViewController,如果我点击状态栏那里它也滚动了一点点太远,使导航栏太高.当我点击某处或滚动一点点时,这也会恢复正常.

正常: 在此输入图像描述

点击状态栏后: 在此输入图像描述

这也只有在我激活了大型标题时才会发生,使用普通标题一切正常.

任何想法如何解决这一问题?

如何重新创建:

  1. 创建一个具有导航控制器和一个新的项目UIViewControllerTableView内.
  2. 设置导航控制器以选择大型标题.半透明.设置标题UIViewController
  3. 设置约束TableView以固定到边缘ViewController
  4. 为创建出口TableViewViewController
  5. 实现委托并设置多个行,例如100
  6. 启动应用
  7. 向下滚动,以便大标题成为正常标题
  8. 点按状态栏,tableView滚动到顶部

现在标题不在它应该的位置,如果你现在向上或向下滚动一点点,它会快速回到正常位置.

ViewController 码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self
    }

}

extension ViewController: UITableViewDelegate, UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int { …
Run Code Online (Sandbox Code Playgroud)

statusbar uinavigationbar ios swift large-title

4
推荐指数
1
解决办法
2464
查看次数

带大标题的UINavigationBar - 如何在iOS 11中找到额外的高度

当使用一个prefersLargeTitles UINavigationControllerUINavigationBariOS 11,导航栏增加高度.在我检查过的iPhone上增加了44到96,但我认为这些数字可以在每个设备上更改(或者至少我们需要编码,就好像它们可以).

我想以编程方式找到"额外"高度 - 在UINavigationBar显示大标题时添加到传统下方的大标题区域的高度.我可以很容易地找到显示大标题的栏的整个高度,但有没有办法以编程方式单独找到栏的大标题部分的高度(没有任何硬编码)?

我需要这个的原因是有时候我想以编程方式滚动到UITableView的顶部,拉下大标题(在"常规高度"导航栏下滚动)以便它显示,并且我需要的内容偏移是导航栏的额外高度.我可以使用导航栏的总高度,但这会将UITableView拉得太远.要做到这一点,我需要硬编码如下:

[self.tableView setContentOffset:CGPointMake(0, -52) animated:NO];
Run Code Online (Sandbox Code Playgroud)

uinavigationbar uinavigationcontroller ios ios11 large-title

3
推荐指数
1
解决办法
5648
查看次数

带有大标题的导航栏黑线

感谢您抽出时间阅读。

首先,让我说,我已经尝试尽职尽责地寻找问题的解决方案,但无济于事,这让我感到压力山大!所以,如果有人找到答案,请你指点我的方向:)

我面临的问题与导航栏下方出现的黑线有关。现在,我非常清楚设置导航栏的默认图像/阴影图像属性来纠正这个问题,因此,我创建了自己的扩展来实现它(如下所示)

    func hideHairline(_ state:Bool) {
    if state {
        self.shadowImage = UIImage()
        self.setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
    }else{
        self.setBackgroundImage(UINavigationBar.appearance().backgroundImage(for: UIBarMetrics.default), for:UIBarMetrics.default)
        self.shadowImage = nil

    }
}
Run Code Online (Sandbox Code Playgroud)

但是,似乎有些行为不正常,并且我的导航栏下方出现了一条黑线(见下文)

带线的导航栏 更奇怪的是,模拟器并没有在同一个屏幕上显示这条线。模拟器设置为像素精确。(如下所示)

没有线的导航栏

我认为这可能与我从以前的 VC 改变的方式有关。我正在从隐藏导航栏变为显示导航栏,并将其设置为prefersLargeTitles. 现在,如果我设置导航栏,不使用大标题,则不会显示黑线。另外,如果我推到下一个视图控制器,然后弹回来,这条线不存在(在推的控制器上,或者新出现的弹出)

在这一点上,我主要只是想知道为什么会发生这种情况?我的意思是,我一定是做错了什么。我写了一个安装扩展,只是为了让代码远离 VC,可能不是最好的编码实践,但是嘿!

        self.hideHairline(true)
    self.titleTextAttributes =  [NSAttributedStringKey.foregroundColor : Constants.navigationBarTextColor]
    self.largeTitleTextAttributes = self.titleTextAttributes
    self.barTintColor = Constants.navigationBar
    self.tintColor = Constants.navigationBarTint
    self.isTranslucent = false
    self.backgroundColor = Constants.navigationBar
    self.prefersLargeTitles = true
Run Code Online (Sandbox Code Playgroud)

Constants是一个包含我的应用程序中所有静态变量的类,例如 colo(u)rs。我刚刚犯了一些愚蠢的错误,还是大标题有错误?

如果您需要任何进一步的信息,请询问:)

谢谢

uinavigationbar ios swift large-title

3
推荐指数
1
解决办法
3073
查看次数