Я вижу, что в iOS 9 setStatusBarHidden(_:withAnimation:)
теперь устарели, и в документации говорится, что вместо этого используется [UIViewController prefersStatusBarHidden]
, но какая альтернатива в iOS 9, если я все еще хочу скрыть строку состояния с помощью анимация слайдов?setStatusBarHidden (_: withAnimation :) устарел в iOS 9
ответ
См preferredStatusBarUpdateAnimation
,
GiF
код
class ViewController: UIViewController {
var isHidden:Bool = false{
didSet{
UIView.animate(withDuration: 0.5) {() -> Void in
self.setNeedsStatusBarAppearanceUpdate()
}
}
}
@IBAction func clicked(sender: AnyObject) {
isHidden = !isHidden
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation{
return .slide
}
override var prefersStatusBarHidden: Bool{
return isHidden
}
}
Swift 3
- вычисляемые переменные заменили некоторые функции
- Функция одушевленные обновила синтаксис
class ViewController: UIViewController {
var isHidden:Bool = false
@IBAction func clicked(sender: AnyObject) {
isHidden = !isHidden
UIView.animate(withDuration: 0.5) {() -> Void in
self.setNeedsStatusBarAppearanceUpdate()
}
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return UIStatusBarAnimation.slide
}
override var prefersStatusBarHidden: Bool {
return isHidden
}
}
Я очистил вверх удивительный ответ Лео немного, перемещая обновление didSet
(Swift 3 синтаксис).
class ViewController: UIViewController {
@IBAction func clicked(sender: AnyObject) {
statusBarHidden = !statusBarHidden
}
var statusBarHidden = false {
didSet {
UIView.animate(withDuration: 0.5) {() -> Void in
self.setNeedsStatusBarAppearanceUpdate()
}
}
}
override var prefersStatusBarHidden: Bool {
return statusBarHidden
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
}
Хотелось бы, чтобы я не забыл использовать didSet время от времени ... Я просто привык к своим старым способам кодирования, но это намного лучше :). – budidino
если вы кодирования с Objective C, вот решение:) (Лео Objective версия C: P спасибо мужчина !!!)
объявить переменную
bool isHidden;
isHidden = false;//in viewDidload()
, а затем добавить этот код, если вы хотите скрыть строку состояния
isHidden = true;
[UIView animateWithDuration:0.6 animations:^{
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}];
после этого добавьте два метода
-(UIStatusBarAnimation) preferredStatusBarUpdateAnimation
{
return UIStatusBarAnimationFade;
}
-(BOOL) prefersStatusBarHidden
{ return isHidden;}
Надежда ваша проблема будет решить (улыбка)
- СВИФТ 3 АЛЬТЕРНАТИВА
Эй, ребята, нашли много аккуратнее способ идти об этом Swift 3, используя частное var-сопряжение с каждым из переопределений. Мой оригинальный пост: https://stackoverflow.com/a/42083459/7183483
но вот тэк его:
Вот отрывок:
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
get {
return .slide
}
}
private var statusBarStyle : UIStatusBarStyle = .default
override var preferredStatusBarStyle: UIStatusBarStyle {
get {
return statusBarStyle
}
}
private var statusBarStatus : Bool = false
override var prefersStatusBarHidden: Bool {
get {
return statusBarStatus
}
}
который я тогда мог бы позвонить в функции следующим образом: (это один из моих примеров , поэтому не обращайте внимания на пользовательскую функцию).
func sliderView(sliderView: SliderView, didSlideToPlace: CGFloat, within: CGFloat) {
let val = (within - (didSlideToPlace - sliderView.upCent))/(within)
print(val)
//Where you would change the private variable for the color, for example.
if val > 0.5 {
statusBarStyle = .lightContent
} else {
statusBarStyle = .default
}
UIView.animate(withDuration: 0.5, animations: {
sliderView.top.backgroundColor = UIColor.black.withAlphaComponent(val)
self.coverLayer.alpha = val
self.scroll.backgroundColor = colors.lightBlueMainColor.withAlphaComponent(val)
}, completion: {
value in
//If you do not call setNeedsStatusBarAppearanceUpdate() in an animation block, the animation variable won't be called it seems.
UIView.animate(withDuration: 0.4, animations: {
self.animating = true
//Where you set the status for the bar (your part of the solution)
self.statusBarStatus = false
//Then you call for the refresh
self.setNeedsStatusBarAppearanceUpdate()
})
})
}
Это отличное решение. Я не думал о том, чтобы сделать статус скрытым флагом динамическим. – phatmann
- 1. iOS 9 willrotatetointerfaceorientation устарел
- 2. setStatusBarHidden: withAnimation не приводит к правильной настройке subviews
- 3. устарел в iOS 9, совместимость?
- 4. kSecAttrAccessibleAlways устарел в ios 9
- 5. sendAsynchronousRequest устарел в iOS 9
- 6. Вызов соответствующего setStatusBarHidden для iOS версии
- 7. setStatusBarHidden устарел, но только то, что работает
- 8. searchDisplayController 'устарел: сначала устарел в iOS 8.0
- 9. sendAsynchronousRequest устарел в iOS 9 (Swift 2) - код передачи?
- 10. Предупреждение XCode при использовании устаревшего метода setStatusBarHidden
- 11. authenticateWithCompletionHandler: устарел: сначала устарел в iOS 6.0
- 12. NSYearCalendarUnit устарел в iOS
- 13. UITableVIew reloadSections: withAnimation: withoutHassle
- 14. iOS 7: «isa» устарел
- 15. SoundCloud iOS SDK устарел?
- 16. directoryContentsAtPath устарел iOS 4
- 17. iOS; NSAutoreleasePool устарел?
- 18. InterfaceOrientation устарел в iOS 8
- 19. setDelegate устарел в iOS 6
- 20. UIBarButton Устарел в IOS 8.0
- 21. dataWithContentsOfMappedFile устарел в iOS 8.0
- 22. UIAlertView 'устарел в iOS 9.0
- 23. GKPeerPickerController устарел в iOS 7
- 24. searchDisplayController устарел в iOS 8
- 25. scrollViewTexturedBackgroundColor устарел в iOS 7.0
- 26. Идентификатор идентификатора iOS устарел
- 27. не setStatusBarHidden работает
- 28. «" init "устарел: первый устарел в ios 10.0" предупреждение в коде
- 29. Альтернатива UIAlertView для iOS 9?
- 30. UIAlertView устарел: сначала устарел в iOS 9.0 - UIAlertView устарел. Использовать UIAlertController с предпочтительнымStyle
Mine не оживляет, даже если он находится в прицельном блоке. Есть идеи? –
Работает ли она с «Просмотр состояния панели на основе контроллера» = НЕТ? –
Не тестировали, но я думаю, что не работает, когда эта клавиша NO: – Leo