Изменено из предыдущего ответа:

у изменить цвет строки состояния с помощью определенного контроллера представления.

Согласно ответам StackOverFlow, я достиг этого.

Естьвопрос , при переключении приложений на iPhone, цвет, который я установил, исчезает, возвращается в исходное состояние.

Все нормально. Пожалуйста, обратите внимание на строку состояния.

Не нормально. Пожалуйста, обратите внимание на строку состояния.

Я не могу понять это. Код, который я пробовал:

установленstatusBar.backgroundColor,

UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
     statusBar.backgroundColor = [UIColor redColor ];
}

2. вставить подпредставление в statusBar.

 UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
 UIView * backgroundColorView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 375, 20) ];
 backgroundColorView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
 backgroundColorView.backgroundColor = [UIColor redColor ];
 [statusBar.subviews.firstObject insertSubview: backgroundColorView atIndex:0];

3. Таким образом, чтобы вставить слой (CALayer).

И я попытался проанализировать это с помощью контрольных точек.

- Когда приложение активно, и дважды щелкните кнопку «Домой» для переключения приложений, метод не вызывается- (void)viewWillDisappear:(BOOL)animated , Это меня немного смущает.

- Я пытаюсь изменить цвет фона строки состояния в методе приложения- (void)applicationWillResignActive:(UIApplication *)applicationЭто не работает. Я не знаю почему.

Хотя из исходного кода Github,Все в порядке во время выполнения, Моя компания не любит использоватьвремя выполнения.

Есть ли другой способбез времени выполнения ?

И я не знаю, как среда выполнения взаимодействует с режимом переключения приложений iPhone.

Главный вопрос - это решитьбез времени выполнения, Больше объяснений приветствуется. я думаю, что это легко, что я скучаю?

Большое спасибо в авансах.

 dengApro12 нояб. 2017 г., 17:25
Спасибо за ваш ответ.Это репо все в порядке со временем выполнения. И приложениеMeetup сделал это сложнее тоже.
 dengApro13 нояб. 2017 г., 07:40
Вы правы, я настраиваю цвет фона позиции строки состояния, изменяяПосмотреть,
 MSU_Bulldog12 нояб. 2017 г., 17:16
Вы не можете изменить цвет строки состояния, пока ваше приложение не активно. Когда вы находитесь в окне переключателя приложений, ОС контролирует цвет строки состояния, потому что ваше приложение не является активным приложением в окне. Поэтому я не думаю, что вы пытаетесь сделать это возможно.

Ответы на вопрос(2)

Решение Вопроса

И это соответствует ситуации с viewControllers, управляемыми navigationViewController

class ViewController: UIViewController {

    let statusBarBgView = { () -> UIView in
        let statusBarWindow: UIView = UIApplication.shared.value(forKey: "statusBarWindow") as! UIView
        let statusBarBgView = UIView(frame: (statusBarWindow.statusBar?.bounds)!)
        return statusBarBgView
    }()


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        UIApplication.shared.statusBarStyle = .lightContent
        let navigationBar = self.navigationController?.navigationBar
        self.statusBarBgView.backgroundColor = UIColor.red
        navigationBar?.superview?.insertSubview(self.statusBarBgView, aboveSubview: navigationBar!)
    }


    override func viewWillDisappear(_ animated: Bool) {

        self.statusBarBgView.removeFromSuperview()
        super.viewWillDisappear(animated)
    }

}

extension UIView {
    var statusBar: UIView? {
        return value(forKey: "statusBar") as? UIView
    }
}

Версия Ответа Objective-C:

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear: animated];
    [UIApplication sharedApplication].statusBarStyle=UIStatusBarStyleLightContent;
    UINavigationBar *navigationBar = self.navigationController.navigationBar;
    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
    self.statusBarBgView = [[UIView alloc ] initWithFrame: statusBar.bounds ];
    self.statusBarBgView.backgroundColor = [UIColor redColor ];
    [navigationBar.superview insertSubview: self.statusBarBgView aboveSubview: navigationBar];
}

- (void)viewWillDisappear:(BOOL)animated {
    [self.statusBarBgView removeFromSuperview ];
    [super viewWillDisappear:animated];
}

Строка состояния, которая показывает информацию об ОС ,,UIWindow Управляется ОС в окне переключателя приложений.

UIView *statusBar = [[[UIApplication sharedApplication] 
valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

Так что все в порядке, чтобы настроить цвет фонаположение строки состояния изменяяПосмотреть , когда в окне переключателя приложений.

 Alfi23 дек. 2017 г., 09:41
Кто-нибудь напишите быструю версию Пожалуйста!
 dengApro19 авг. 2018 г., 13:34
Конечно. Иерархия ViewController отличается. Моя ситуация - навигационный толчок. Возможно, вам следует задать новый вопрос и оставить ссылку @TusharLathiya
 dengApro23 дек. 2017 г., 17:35
Обновлено Надеюсь, вам понравится
 Tushar Lathiya18 авг. 2018 г., 08:06
Не работает, когда ViewCantroller всплывающее снизу вверх.

Изменено из предыдущего ответа:

struct Utility {
    static var statusBarBgView = { () -> UIView in
        let statusBarBgView = UIView(frame: UIApplication.shared.statusBarFrame)
        return statusBarBgView
    }()
}

extension UIViewController {

    func setupStatusBar(statusBarBgView: inout UIView) {
        UIApplication.shared.statusBarStyle = .lightContent
        statusBarBgView.backgroundColor = .red
        let navigationBar = self.navigationController?.navigationBar
        UIApplication.shared.keyWindow!.insertSubview(statusBarBgView, aboveSubview: navigationBar!)
    }
}

// Usage:
self.setupStatusBar(statusBarBgView: &Utility.statusBarBgView)

Ваш ответ на вопрос