Как я могу изменить рамку строки состояния?

Я пытался использовать это, чтобы получить кадр строки состояния:

var statusBarWindow = UIApplication.sharedApplication().valueForKey("statusBarWindow")

однако, когда я пытаюсь изменить фрейм, он говорит, что значение является неизменным:

statusBarWindow?.frame = CGRect(x: -oldViewFrame, y: statusBarWindow.frame.origin.y, width: statusBarWindow.frame.size.width, height: statusBarWindow.frame.size.height)

1 ответ

Решение

Я дам вам ответ, основываясь на комментариях, которые вы написали о своем намерении ответить на этот вопрос.


Решение

Вы можете заставить строку состояния исчезать при открытии боковой панели (аналогично приложению Slack), переопределив метод prefersStatusBarHidden от UIViewController для боковой панели. Это должно быть что-то вроде следующего:

override func prefersStatusBarHidden() -> Bool {
    return true
}

Вы также можете изменить внешний вид этого двумя способами: preferredStatusBarStyle а также preferredStatusBarUpdateAnimation


пример

Я сделал простой проект, чтобы проиллюстрировать это. Можно реализовать боковую панель разными способами, поэтому вместо этого я основал этот пример на поповере. Ваша реализация будет зависеть от того, как вы внедрили боковую панель.

Я сделал простую раскадровку с двумя UIViewController и UIButton в каждом. При нажатии на первый UIButton, тогда это вызовет переход с типом Present As Popover это покажет второй контроллер.

Первый UIViewController в нем нет кода (все делается в раскадровке), но второй UIViewController имеет код для скрытия строки состояния.

Я прикрепил скриншот раскадровки и код для второго UIViewController ниже.

//
//  PopController.swift
//  SidebarHideStatus
//
//  Created by Stefan Veis Pennerup on 31/01/16.
//  Copyright © 2016 Kumuluzz. All rights reserved.
//

import UIKit

class PopController: UIViewController {

    // MARK: - Storyboard actions

    @IBAction func backButtonPressed(sender: UIButton) {
        dismissViewControllerAnimated(true, completion: nil)
    }

    // MARK: - Status bar

    override func prefersStatusBarHidden() -> Bool {
        return true
    }
}

Раскадровка примера проекта с выделенным переходом, <code>UIView</code> вместо <code>UIViewController</code> для боковой панели.</p><p>Прежде всего, я бы порекомендовал вам разложить вашу боковую панель на отдельную <code>UIViewController</code> так как это сделает его намного более пригодным для повторного использования в будущем, но это совершенно другое обсуждение, которое может продолжаться в течение многих дней!</p><p>Чтобы скрыть строку состояния, вам все равно нужно использовать метод обратного вызова, который я выделил ранее, но вы просто должны вызвать метод <code>setNeedsStatusBarAppearanceUpdate</code> для того, чтобы вручную обновить его.</p><p>Я обновил начальный <code>UIViewController</code> со следующим кодом и удалил переход, чтобы продемонстрировать этот подход.</p><pre><code>//
//  ViewController.swift
//  SidebarHideStatus
//
//  Created by Stefan Veis Pennerup on 31/01/16.
//  Copyright © 2016 Kumuluzz. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    // MARK: - Properties

    private var isSidebarShown = false

    // MARK: - Storyboard outlets

    @IBAction func buttonPressed(sender: UIButton) {
        isSidebarShown = !isSidebarShown
        setNeedsStatusBarAppearanceUpdate()
    }

    // MARK: - Status bar

    override func prefersStatusBarHidden() -> Bool {
        return isSidebarShown
    }

    override func preferredStatusBarUpdateAnimation() -> UIStatusBarAnimation {
        // NOTE: This method has no effect now when
        // using the method setNeedsStatusBarAppearanceUpdate()
        return .Slide
    }

}
</code></pre>
                                        
                                    
                                </div>
                                <div class=

Другие вопросы по тегам