web-dev-qa-db-ja.com

iOS11の新しいナビゲーションバーの大きなタイトルとしてのカスタムタイトルビュー

UITableViewControllerのタイトルビューとしてボタンを使用しており、カテゴリのドロップダウンリストが開きます。カテゴリを選択すると、選択したカテゴリでテーブルビューのコンテンツがフィルタリングされます。

ボタンには、選択したカテゴリの名前と小さな矢印が表示されます。これは、iBooksが以前のように見えたのと同じです(または、まだ見えますか?しばらく使用していません)。したがって、標準のタイトルと同じ動作をして、最初は大きく、テーブルビューをスクロールすると折りたたまれるようにしたいと思います。

これを行う方法はありますか?

ありがとう

8
Denis Balko

新しい大きなタイトルのため、IOS11ではnavigationItem.titleViewのカスタムビューの制約を設定する必要があるようです。

たとえば、これを行います。

customView.widthAnchor.constraint(equalToConstant: 200).isActive = true
customView.heightAnchor.constraint(equalToConstant: 44).isActive = true

self.navigationItem.titleView = customView

これは、幅と高さの両方で実行する必要があることに注意してください。

動作するはずです。少なくとも私の場合は、ボタンを追加する必要はありません...

これは、サイズがゼロのカスタムビューがないことを確認するためにAppleによって提案されました。 https://developer.Apple.com/videos/play/)のスライド33を参照してください。 wwdc2017/204 /

7
iAmcR

NavigationItem.titleViewのタッチが壊れているようです。ジェスチャー、タップイベント、ボタン-何も機能しません

4

IOS 11のバグのようです: https://forums.developer.Apple.com/thread/82466

私はこの回避策を暫定的に実装しました:

    private lazy var navBarActionButtonIOS11: UIButton = {
        button.addTarget(self.navTitleView, action: #selector(self.navTitleView.didTapView), for: .touchUpInside)
        return button
    }()

[...]

        navigationItem.titleView = navTitleView
        if #available(iOS 11.0, *), let navBar = navigationController?.navigationBar {
            navBarActionButtonIOS11.removeFromSuperview()
            navBar.addSubview(navBarActionButtonIOS11)
            navBarActionButtonIOS11.center.x = navBar.center.x
        }

別の解決策は、UIButtonをnavigationItem.titleViewに直接割り当てることです。

Appleこれがすぐに修正されることを願っています!

2
Juan Sagasti

まあ、私は同じ問題を抱えていました。 UINavigationItem.titleViewにUIButtonがあり、それらはタッチにまったく反応しませんでした。問題は、自動レイアウトのために、これらのボタンがサイズ(0,0)のビューにあることです。したがって、この問題を修正するには、カスタムビューにビューを追加する必要があります。これを「contentView」と呼び、すべてのコントロールをそのcontentView内に配置します。また、contentViewには、制約付きの定義済みサイズが必要です。簡単なテストは、contentViewに幅と高さの制約を追加することです。そして、すべてが再び機能します。

これが誰かを助けることを願っています。

1
Juraj Antas