Wie kann ich meine Ansicht während eines Telefonats unter der grünen Leiste anzeigen lassen? Gerade jetzt wird meine App während eines Telefonats teilweise von der grünen Leiste abgedeckt.Wie positioniere ich die Ansicht während eines Telefonanrufs unter der grünen Leiste?
Antwort
Wenn Sie‘ Stellen Sie mithilfe des Interface Builder sicher, dass die Masken für die Autorisierung so eingestellt sind, dass die Größe der Ansichten geändert wird, anstatt sie an derselben Position zu platzieren. Sie können die Option Statusanzeige für eingehende Anrufe unter Hardware im Simulator verwenden, um sie zu testen.
Wenn Sie nicht IB verwenden, können Sie die Autoresize-Masken im Code einrichten.
Wenn Sie keine Ansichten verwenden, müssen Sie die Größe Ihrer Grafiken anpassen, wenn Sie die entsprechenden Benachrichtigungen erhalten.
können Sie herausfinden, wenn diese im Begriff ist, die folgenden UIApplicationDelegate Methoden geschehen mit:
- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame {
NSLog(@"willChangeStatusBarFrame : newSize %f, %f", newStatusBarFrame.size.width, newStatusBarFrame.size.height);
}
- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)newStatusBarFrame {
NSLog(@"didChangeStatusBarFrame : newSize %f, %f", newStatusBarFrame.size.width, newStatusBarFrame.size.height);
}
Alternativ Sie eine Benachrichtigung in Ihrem UIViewController Unterklasse registrieren:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameChanged:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameWillChange:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil];
}
- (void)statusBarFrameWillChange:(NSNotification*)notification {
NSValue* rectValue = [[notification userInfo] valueForKey:UIApplicationStatusBarFrameUserInfoKey];
CGRect newFrame;
[rectValue getValue:&newFrame];
NSLog(@"statusBarFrameWillChange: newSize %f, %f", newFrame.size.width, newFrame.size.height);
// Move your view here ...
}
- (void)statusBarFrameChanged:(NSNotification*)notification {
NSValue* rectValue = [[notification userInfo] valueForKey:UIApplicationStatusBarFrameUserInfoKey];
CGRect oldFrame;
[rectValue getValue:&oldFrame];
NSLog(@"statusBarFrameChanged: oldSize %f, %f", oldFrame.size.width, oldFrame.size.height);
// ... or here, whichever makes the most sense for your app.
}
Beachten Sie, dass die obigen Vorschläge auch ausgelöst werden, wenn das Gerät gedreht wird. Wenn Sie nur herausfinden möchten, wann die Statusleiste aufgrund eines eingehenden/laufenden Telefonanrufs an Höhe zugenommen hat. Ich fand den folgenden Code zu arbeiten:
AppDelegate.m
- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
float adjustment = 0;
if ([UIApplication sharedApplication].statusBarFrame.size.height == 40)
{
adjustment = -20;
}
else if ([UIApplication sharedApplication].statusBarFrame.size.height == 20 && oldStatusBarFrame.size.height == 40)
{
adjustment = 20;
}
else
{
return;
}
CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:duration];
{YOUR VIEW Controller - remove .view if a view}.view.frame = CGRectMake({YOUR VIEW Controller}.view.frame.origin.x, {YOUR VIEW Controller}.view.frame.origin.y + adjustment, {YOUR VIEW Controller}.view.frame.size.width, {YOUR VIEW Controller}.view.frame.size.height);
[UIView commitAnimations];
}
Idem mit einem Tab Bar App und iOS6/7 dank user1208489 ‚s answer.
Werte sind für jedes iOS völlig unterschiedlich und seltsam. ; OP
mainAppDelegate.m
- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
float vue = 0;
float barre = 0;
float hauteur = 0;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 // pour Xcode5/SDK7
if ([UIApplication sharedApplication].statusBarFrame.size.height == 40)
{
vue = -20;
barre = +20;
}
else
if ([UIApplication sharedApplication].statusBarFrame.size.height == 20 && oldStatusBarFrame.size.height == 40)
{
vue = 0;
barre = -20;
}
else return;
#else // pour Xcode4/SDK6
if ([UIApplication sharedApplication].statusBarFrame.size.height == 40)
{
vue = +20;
hauteur = 1;
barre = -1-20;
}
else
if ([UIApplication sharedApplication].statusBarFrame.size.height == 20 && oldStatusBarFrame.size.height == 40)
{
vue = -20;
hauteur = -1;
barre = +1+20;
}
else return;
#endif
CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:duration];
self.tabBarController.view.frame = CGRectMake(self.tabBarController.view.frame.origin.x, self.tabBarController.view.frame.origin.y + vue, self.tabBarController.view.frame.size.width, self.tabBarController.view.frame.size.height+hauteur);
self.tabBarController.tabBar.frame = CGRectMake(self.tabBarController.tabBar.frame.origin.x, self.tabBarController.tabBar.frame.origin.y + barre, self.tabBarController.tabBar.frame.size.width, self.tabBarController.tabBar.frame.size.height);
[UIView commitAnimations];
}
mit Xcode 4.6.3 auf iPhone 4S 7.0.4 (11B554a) Geprüft (4H1503) und Xcode 5.0.2 (5A3005).
- 1. Aufnahme eines Telefonanrufs in Android
- 2. Wie positioniere ich iframes?
- 3. Wie positioniere ich eine untergeordnete Ansicht relativ zur enthaltenden Ansichtsgröße?
- 4. Wie positioniere ich diese Ansicht relativ zu einer anderen?
- 5. Wie positioniere ich Menüpunkte in der Navigationsansicht?
- 6. Wie kann ich die Farbe eines grünen ToggleButton durch einen Linksklick der Maus zu rot ändern
- 7. Vermeiden hartzucodieren iPhone Bildschirmgröße mit programmatischer Ansicht Schaffung
- 8. Wie positioniere ich eine UIView?
- 9. anzeigen Listview Artikel unter der Ansicht
- 10. Wie positioniere ich ein Div innerhalb eines div?
- 11. Wie positioniere ich das Google Map Infowindow
- 12. Wie positioniere ich ein Bild an der Unterseite von div?
- 13. Ausblenden der Konsole während der Ausführung eines Skripts unter Windows
- 14. Autolayout ignoriert UITabBar (Inhalt unter der Leiste) auf iOS7
- 15. Wie kann ich die Leiste an der Oberseite loswerden?
- 16. Android Scroll-Ansicht geht über die APP-Leiste
- 17. Android: Recycler Ansicht über Tab-Leiste
- 18. Wie positioniere ich den Eingabetextcursor in C?
- 19. Wie positioniere ich Datenpunkte in d3 neu?
- 20. Drupal 8, wie kann ich eine Ansicht während der hook_install eines Installationsprofils deaktivieren?
- 21. Wie positioniere ich zwei Divs über jedem
- 22. Wie positioniere ich divs innerhalb des Headers?
- 23. Wie positioniere ich div's mit CSS?
- 24. Xcode, wie kann ich die obere Leiste aus einem
- 25. Wie verschiebe ich die Ansicht nach unten?
- 26. Wie positioniere ich div in der Mitte des Bildschirms?
- 27. Wie positioniere ich das Element in der Aktionsleiste?
- 28. Wie positioniere ich ein Eingabeformular in der Mitte einer Seite?
- 29. Wie kann ich die Größe des Rands einer Ansicht ermitteln?
- 30. Wie entferne ich den Schatten über der App-Leiste?
Sie können die UIKit-Erweiterungen sogar wie folgt verwenden: CGRect newFrame = [rectValue CGRectValue]; - in jedem Fall! –
Ich möchte nur hinzufügen, die NSLog und Namenskonvention ist etwas falsch. statusBarFrameWillChange wird vor statusBarFrameChanged aufgerufen, sodass die Benachrichtigung von statusBarFrameWillChange tatsächlich der OLD-Wert und nicht der neue Wert ist. Umgekehrt mit der anderen Methode. – micnguyen