use*_*176 18 statusbar ios in-call
如何检测用户是在通话还是网络共享?我有这样的iAd子视图:
_UIiAD = [[self appdelegate] UIiAD];
_UIiAD.delegate = self;
[_UIiAD setFrame:CGRectMake(0,470,320,50)];
[self.view addSubview:_UIiAD];\
Run Code Online (Sandbox Code Playgroud)
当用户通话时,它设置错误了吗?我怎么检测到这个?
Gon*_*nzo 33
UIApplicationDelegate 有这两种方法.
// ObjC
- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame; // in screen coordinates
- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame;
// Swift
func application(_ application: UIApplication, willChangeStatusBarFrame newStatusBarFrame: CGRect)
func application(_ application: UIApplication, didChangeStatusBarFrame oldStatusBarFrame: CGRect)
Run Code Online (Sandbox Code Playgroud)
而且也有Notifications.
//ObjC
UIApplicationWillChangeStatusBarFrameNotification
UIApplicationDidChangeStatusBarFrameNotification
// Swift
Notification.Name.UIApplicationWillChangeStatusBarFrame
Notification.Name.UIApplicationDidChangeStatusBarFrame
Run Code Online (Sandbox Code Playgroud)
但他们没有发布应用程序,所以我不推荐它.
模拟器有一个有用的工具来测试它.
硬件 - >切换通话状态栏(⌘Y)
我建议你在你的AppDelegate文件上实现这些方法.当状态栏改变它的高度时,将调用它们.其中一个在之前被调用,另一个在变化之后被调用.
假设您希望ViewController在发生更改时通知您,一个选项是发送通知.像这样
首先,添加此属性/变量 AppDelegate
// ObjC
@property (assign, nonatomic) CGRect currentStatusBarFrame;
// Swift
var currentStatusBarFrame: CGRect = .zero
Run Code Online (Sandbox Code Playgroud)
然后,实施 willChangeStatusBarFrame
// ObjC
- (void) application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame
{
self.currentStatusBarFrame = newStatusBarFrame;
[[NSNotificationCenter defaultCenter] postNotificationName:@"Status Bar Frame Change"
object:self
userInfo:@{@"current status bar frame": [NSValue valueWithCGRect:newStatusBarFrame]}];
}
// Swift
func application(_ application: UIApplication, willChangeStatusBarFrame newStatusBarFrame: CGRect) {
currentStatusBarFrame = newStatusBarFrame
NotificationCenter.default.post(
name: NSNotification.Name(rawValue: "Status Bar Frame Change"),
object: self,
userInfo: ["current status bar frame": newStatusBarFrame])
}
Run Code Online (Sandbox Code Playgroud)
我们完成了我们的基础Status Bar Frame Checker.您ViewController需要知道状态栏框架的任何下一部分.
任何时候你想获得状态栏框架,你都喜欢这样
// ObjC
[(AppDelegate*)[[UIApplication sharedApplication] delegate] currentStatusBarFrame]
// Swift
(UIApplication.shared.delegate as! AppDelegate).currentStatusBarFrame
Run Code Online (Sandbox Code Playgroud)
并在更改时收到通知,将其添加到ViewDidLoad方法中.
在ObjC
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(statusBarFrameChanged:)
name:@"Status Bar Frame Change"
object:[[UIApplication sharedApplication] delegate]];
Run Code Online (Sandbox Code Playgroud)
并实现此方法
- (void) statusBarFrameChanged:(NSNotification*)notification
{
CGRect newFrame = [[notification.userInfo objectForKey:@"current status bar frame"] CGRectValue];
NSLog(@"new height %f", CGRectGetHeight(newFrame));
}
Run Code Online (Sandbox Code Playgroud)
在斯威夫特
NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "Status Bar Frame Change"),
object: nil,
queue: nil) { (note) in
guard let currentStatusBarFrame = note.userInfo?["current status bar frame"] as? CGRect else {return}
print("New Height", currentStatusBarFrame.height)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11433 次 |
| 最近记录: |