在我的应用程序中,我有多个视图控制器,大多数都有一个右侧UIBarButtonItem,带有直接的"show"segue动作.

切换到另一个视图,然后按下'< Back'按钮,原来的按钮项仍会淡出,尽管在其他方面仍然可用.

这似乎只有在iOS 11.2下才会发生.

我看不出有任何设置可以做到这一点,而且至少在其中一种情况下,没有特定的segue解卷或viewDidAppear处理.我会发布一些代码,但AFAICS这都是默认的UINavigationBar行为.

推荐答案

这是iOS 11.2中的一个漏洞,之所以会出现,是因为UIBarButtonItem在导航后保持高亮显示,在另一个视图控制器弹出后不会恢复正常状态.

为了避免这种行为

  1. 使用UIBarButtonItemUIButton作为自定义视图

  2. 禁用并重新启用viewWillDisappear(_:)中的bar button项(尽管这会导致按钮立即出现,但使用matt's solution可避免此情况):

    barButtonItem.isEnabled = false
    barButtonItem.isEnabled = true
    

Swift相关问答推荐

如何避免使用DispatchSemaphores时线程爆炸?

UITableView未显示类数组数据

SWIFT中MAP的静态方法包装器

Swift-Can无法在AudioKit中找出简单的麦克风效果-文件链

SwiftUI:为什么@State在子视图中持续存在?

background Task(.backgroundTask)不适用于MySQL

在SwiftUI中绘制形状的路径后填充形状

当将新值推送到 NavigationStack 时,SwiftUI 的 navigationDestination 已在堆栈的早期声明

仅当 boolean 为真时才实现方法(application:didReceiveRemoteNotification)

使用 RxSwift 围绕 async/await 方法创建 Observable

为什么 id 不能通过 struct 从 Objective-C 移植到 Swift?

如何为 Swift UI 视图定义 struct ?

iOS SwiftUI - 无法转换 ObservedObject 类型的值

是否可以使任何协议符合 Codable?

如何根据 SwiftUI 中的字体大小定义按钮的大小?

如何有条件地格式化 SwiftUI 代码

仅在 Swift 中创建 Setter

为 UIActivityViewController Swift 设置不同的活动项

Swift 自定义字体 Xcode

Swift - 迭代 struct 对象时如何对其进行变异