【问题标题】:UISearchController resets the status bar style to .Default when the search bar becomes the first responderUISearchController 将状态栏样式重置为 .Default 当搜索栏成为第一响应者时
【发布时间】:2016-05-26 21:40:18
【问题描述】:

我正在使用 UISearchController 并将其搜索栏添加到表格视图控制器的标题中:

我面临的问题是,当用户开始在搜索栏中输入内容,使其成为第一响应者时,状态栏样式将恢复为 .Default:

我使用preferredStatusBarStyle() 在视图控制器中设置样式。相反,如果我使用 info.plist 设置样式并将“基于视图控制器的状态外观”键设置为 NO,则样式保持为 Light。

但是,将“基于视图控制器的状态外观”键设置为 NO 不是一个选项,因为我有一些需要默认样式的 VC 和一些需要灯光样式的 VC。

我尝试将样式重置为点亮搜索栏委托方法(当它成为第一响应者时被调用),即:

func searchBarShouldBeginEditing(searchBar: UISearchBar) -> Bool
{
    UIApplication.sharedApplication().statusBarStyle = .LightContent
    self.setNeedsStatusBarAppearanceUpdate()
    return true
}

但这也没有用。

有什么建议吗?

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    我不知道是否还有其他方法,但我通过实现 UISearchController 派生类并改用它来解决它:

    class MySearchController : UISearchController
    {
       // various init overrides ...
    
        override func preferredStatusBarStyle() -> UIStatusBarStyle {
            return .LightContent
        }
    }
    

    或者如果正在使用导航控制器,那么这将阻止调用 preferredStatusBarStyle(),在这种情况下使用它来代替:

    UIApplication.sharedApplication().statusBarStyle = .LightContent

    确保在 info.plist 中“基于控制器的状态栏外观”设置为 NO。

    【讨论】:

      【解决方案2】:

      SWIFT 3.0 更新

      当导航控制器被调用时:

      UIApplication.shared.statusBarStyle = .lightContent(在 viewDidLoad 上)

      +

      在 info.plist 上设置 View controller-based status bar appearance = NO

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-13
        • 1970-01-01
        • 2016-03-24
        • 1970-01-01
        • 1970-01-01
        • 2022-01-26
        • 1970-01-01
        相关资源
        最近更新 更多