• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 在 viewDidLoad 期间设置的导航栏按钮在 iOS 11 中出现 View 之后才会出现

[复制链接]
菜鸟教程小白 发表于 2022-12-11 18:59:01 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在 iOS 10 中,我可以确定我希望出现在 viewDidLoad 中的导航栏按钮列表,并且它们会在 View Controller 过渡时出现在导航栏中。

在 iOS 11 中,我不能再这样做了。在界面构建器中设置的任何导航栏按钮都会在 View Controller 过渡时显示,并且我的自定义按钮列表在 View 完成滑入后才会显示。更新 viewWillAppear 中的按钮无济于事.

这只是 iOS 11 中的一个错误,还是我应该做的其他事情?是否有解决方法让我可以在屏幕加载时继续显示按钮?

在以下示例中,我在 Storyboard 中设置了一个“默认按钮”按钮,并在 viewDidLoad 中使用“编辑”按钮覆盖它。该项目是available on Github .

iOS 10

iOS 10 Behavior

iOS 11

iOS 11 Behavior



Best Answer-推荐答案


看起来问题是当 View Controller 传递给导航 Controller 时,在转换期间显示的导航栏图标似乎是固定的。到 viewDidLoad 被调用时,图标已经被修复了。

为了解决这个问题,我们需要更新 View Controller 的navigationItem上的导航栏图标。 View Controller 被推送到导航 Controller 堆栈之前。 p>

一种方法是在 awakeFromNib 中设置导航栏图标。这就是@Joe 的回答正在有效地做的事情,因为在awakeFromNib.

但是,在 awakeFromNib 中执行此操作会阻止您考虑在 prepareForSegue 中 View Controller 上设置的任何属性。因此,另一种选择(也是我正在使用的)是通过在设置任何所需属性后添加行 _ = controller.view 来强制整个 View 加载到 prepareForSegue .

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetail" {
        if let indexPath = tableView.indexPathForSelectedRow {
            let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController
            ...
            _ = controller.view
        }
    }
}

关于ios - 在 viewDidLoad 期间设置的导航栏按钮在 iOS 11 中出现 View 之后才会出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46689873/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap