UIApplicationDidChangeStatusBarOrientationNotification 已弃用,还有其他选择吗?

Posted

技术标签:

【中文标题】UIApplicationDidChangeStatusBarOrientationNotification 已弃用,还有其他选择吗?【英文标题】:UIApplicationDidChangeStatusBarOrientationNotification is deprecated, any alternative? 【发布时间】:2019-07-05 09:41:10 【问题描述】:

我已将我的应用程序目标更改为 ios 13 以检查我的应用程序中已弃用的方法,我收到以下警告:

'UIApplicationDidChangeStatusBarOrientationNotification' 已弃用:首先在 iOS 13.0 中弃用 - 请改用 viewWillTransitionToSize:withTransitionCoordinator:。 这是我在项目中实现的代码。

    - (instancetype)init

    self = [super init];
    if (self) 
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(onChangeStatusBarOrientationNotification:)
                                                     name:UIApplicationDidChangeStatusBarOrientationNotification
                                                   object:nil];
    
    return self;

请向我推荐适用于 ios 12 和 ios 13 的解决方案。

提前致谢。

【问题讨论】:

实施viewWillTransitionToSize:withTransitionCoordinator: 并在onChangeStatusBarOrientationNotification: 那里做任何你想做的事? 能给我一个小演示吗? - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; [self onChangeStatusBarOrientationNotification:nil]; ? 【参考方案1】:

虽然这是一个旧帖子,但我最近也遇到了这种情况。只需实现协议UIContentContainer

@interface MyViewController : NSObject <UIContentContainer>

并在实现中实现方法,并在方法内添加调用你的函数。

@implementation MyViewController 
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
        [self onChangeStatusBarOrientationNotification];
    
@end

【讨论】:

如果不是视图或者没有控制器的视图怎么办?此外,viewWillTransitionToSize 仅在控制器与 addChild 一起添加到另一个控制器时才被调用(并且仅添加控制器的视图是不够的)。 请参阅my answer【参考方案2】:

尝试类似:

[[NSNotificationCenter defaultCenter] addObserver: self
    selector: @selector(onChangeStatusBarOrientationNotification:)
    name: UIDeviceOrientationDidChangeNotification
    object: nil];

但请注意,它只是有效,我从不在下面调用:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

所以,也许它是默认启用的。

斯威夫特 5

NotificationCenter.default.addObserver(self,
    selector: #selector(onLayoutChange),
    name: UIDevice.orientationDidChangeNotification,
    object: nil)

// ...

@objc public func onLayoutChange() 
    // Handle change here.

【讨论】:

以上是关于UIApplicationDidChangeStatusBarOrientationNotification 已弃用,还有其他选择吗?的主要内容,如果未能解决你的问题,请参考以下文章