首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有GroupedListStyle SwiftUI视图的prefersLargeTitles

具有GroupedListStyle SwiftUI视图的prefersLargeTitles
EN

Stack Overflow用户
提问于 2020-04-17 15:06:34
回答 1查看 478关注 0票数 0

我有一个父视图,我希望导航标题变大。然后,我推送一个带有分组表视图的子视图,并希望导航标题为inline

这在SwiftUI上运行得很好,但是当我的父级是带有prefersLargeTitles = true的UIViewController,并且我按下UIHostingController(rootView: ChildView())时,子目录中的导航栏标题会跳转

以下是预期行为(仅使用SwiftUI )

以下是从UIKit推送时的行为:

这是可以工作的SwiftUI代码

代码语言:javascript
复制
struct ParentView: View {
    var body: some View {
        NavigationView {
            Text("SwiftUI")
                .navigationBarItems(trailing: navigationButton)
                .navigationBarTitle("SwiftUI Parent", displayMode: .large)
        }
    }

    var navigationButton: some View {
        NavigationLink(destination: ChildView()) {
            Text("Push")
        }
    }
}

struct ChildView: View {
    let list = ["One", "Two", "Three"]
    var body: some View {
        List(list, id: \.self, rowContent: Text.init)
            .listStyle(GroupedListStyle())
            .navigationBarTitle("SwiftUI Child", displayMode: .inline)
    }
}

struct ChildView_Previews: PreviewProvider {
    static var previews: some View {
        ChildView()
    }
}

这就是我从UIKit推送SwiftUI子级的方法

代码语言:javascript
复制
class ParentViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "UIKit Parent"

        let barItem = UIBarButtonItem(title: "Push", style: .plain, target: self, action: #selector(pushChild))
        navigationItem.rightBarButtonItem = barItem
        view.backgroundColor = UIColor.systemBackground
        navigationController?.navigationBar.prefersLargeTitles = true
    }

    @objc
    func pushChild(_ sender: Any) {
        let childViewController = UIHostingController(rootView: ChildView())
        navigationController?.pushViewController(childViewController, animated: true)

    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-17 16:13:55

在推送之前,将子视图控制器的navigationItem.largeTitleDisplayMode设置为.never (即使它是UIHostingController)。

代码语言:javascript
复制
func pushChild(_ sender: Any) {
    let childViewController = UIHostingController(rootView: ChildView())
    childViewController.navigationItem.largeTitleDisplayMode = .never
    navigationController?.pushViewController(childViewController, animated: true)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61265853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档