2014-10-20 4 views
11

In meiner UINavigation Bar verwendet, um eine XIB mit einer Reihe von UIViews ist die Positionierung des linken und rechten Leiste Taste Artikel hinzugefügt weg:UIBarButton Artikel auf dem Bildschirm Rand in iOS 8, wenn im Stand-Alone-Ansicht

Navigation bar in additiona UIView in XIB

Die Ansicht in der XIB hat einfach eine Steckdose zu einem View-Controller, ist aber nicht die Hauptansicht. Es wird gezeigt, über:

[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL]; 

ich eine andere einfachere Ansicht haben, die direkt auf die Ansicht Eigenschaft eines View-Controller gebunden ist, die - wie erwartet - nur normal aussieht.

Normal navigation bar

Alle Ansichten haben Auto-Layout. Die Einschränkungen sind in Ordnung. Ich habe verschiedene Dinge ausprobiert, konnte mir aber keine Lösung (oder einen Grund) einfallen lassen. Die Navigationsleiste und Elemente sind nur Plain Vanilla Bar-Taste Elemente ohne so etwas wie Aussehen Proxies usw.

In der 7.1-SIM sieht alles nur normal aus.

Wer hat das schon einmal gesehen?

Dank

[EDIT]

ich eine Lösung gefunden, aber nicht den Grund:

Wenn ich statt

[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL]; 

, die die neue Ansicht als ein Subview der Adds UIWindow,

verwenden Sie dies:

[UIView transitionWithView:self.view duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ 
    [self.view addSubview:self.settingsView]; 
} completion:nil]; 

die neue Ansicht als Unteransicht der vorhandenen UIViewControllers Ansicht hinzugefügt, alles ist in Ordnung.

Ich frage mich dies, wenn ein Bug und UINavigationBars auf eine seltsame Weise machen, wenn in einer Ansicht enthalten, die sich dynamisch an das Fenster hinzugefügt wird ...

+0

Gleiches Problem. Ich habe eine benutzerdefinierte Ansicht und animiert zum Anzeigen, aber linke und rechte Elemente berühren beide die Kanten. – Geekoder

+0

Gemäß den Dokumenten ersetzt 'transitionFromView: toView: duration: options: completion: 'standardmäßig' 'View'' durch' toView'. Ihre Lösung fügt stattdessen eine Unteransicht hinzu. Dies könnte der Unterschied sein, der das Problem verursacht, besonders "fromView" ist die Ansicht des Controllers. – Aris

Antwort

2

nicht sicher, was mit UIBarButtonItem passiert. Es sollte durch Auto-Layout arrangiert werden und es muss gut funktionieren. Kann einer der Zwangskonflikte mit anderen oder fehlgeleiteten sein.

Wenn Sie es nicht lösen können. Ich habe noch eine Lösung für dich. Sie müssen UIBarButtonItem programmatisch in Ihrem VC erstellen.

Die Idee besteht darin, vor dem Hinzufügen von UIBarButtonItem Platz aus dem linken und rechten Padding zuzuweisen.

Unterhalb des Codes führen Sie den Trick.

UIBarButtonItem *leftPadding = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
           UIBarButtonSystemItemFixedSpace target:self action:nil]; 
[leftPadding setWidth:5]; // Adjust width for padding from left side. 

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
           UIBarButtonSystemItemAdd target:self action:@selector(addButtonTapped:)]; 
[self.navigationItem setLeftBarButtonItems:@[leftPadding, addButton]]; 


UIBarButtonItem *rightPadding = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
           UIBarButtonSystemItemFixedSpace target:self action:nil]; 
[rightPadding setWidth:10]; // Adjust width for padding from right side. 

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
           UIBarButtonSystemItemDone target:self action:@selector(doneButtonTapped:)]; 

[self.navigationItem setRightBarButtonItems:@[rightPadding, doneButton]]; 
+0

Das funktioniert natürlich, aber in iOS 7 sehen die Dinge dann falsch aus, weil das zusätzliche Padding die Elemente der Balkenschaltfläche weiter ausgleicht. Ich suche immer noch nach einem Grund für dieses Verhalten. Ich möchte iOS 7 nicht nur auffüllen, um Padding für iOS 8 hinzuzufügen. Ich denke Apple wird dies auch in einem zukünftigen Update ändern ... – k1th

0

Hinzufügen Schaltfläche mit dem untenstehenden Code, es wird auf jeden Fall funktionieren.

CGRect frameimg = CGRectMake(0, 0, 60, 30); 
UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg]; 
//[someButton setBackgroundImage:image3 forState:UIControlStateNormal]; 
[someButton setTitle:@"Update" forState:UIControlStateNormal]; 
[someButton addTarget:self action:@selector(updateProfile) 
    forControlEvents:UIControlEventTouchUpInside]; 
[someButton setShowsTouchWhenHighlighted:YES]; 
UIBarButtonItem *menuButton =[[UIBarButtonItem alloc] initWithCustomView:someButton]; 
self.navigationItem.rightBarButtonItem = menuButton; 
0

Das Problem ist in layoutMargins.

Scheint wie Ihre UINavigationBar hat Null Marge. Es sollte 8 Punkte von jeder Seite haben.

Verwandte Themen