Ich habe in einem Projekt festgestellt, dass die Positionierung eines Popover über einem rechten Balkenknopf aus irgendeinem Grund nach rechts verschoben zu sein scheint. Ich habe versucht, stattdessen eine UIButton für die benutzerdefinierte Ansicht verwenden, dann präsentiert das Popover von dieser Schaltfläche, aber Popover scheint die ShowFromRect zu ignorieren, wenn ich es tatsächlich mit dem "zentrierten" Wert bereitstellen.UIPopover presentFromBarButton off center
Der Code dahinter ist ganz einfach:
- (void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"share"] style:UIBarButtonItemStylePlain target:self action:@selector(shareTap:)];
self.navigationItem.rightBarButtonItem = button;
}
- (void)shareTap:(UIBarButtonItem *)button {
self.popover = [[UIPopoverController alloc] initWithContentViewController:[[UIViewController alloc] init]];
[self.popover presentPopoverFromBarButtonItem:button permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
Nun, wenn ich mit dem internen Taste umschalten, wie erwähnt, sehe ich ein ähnliches Verhalten (Anmerkung Farbwechsel so zeigt Bild nach oben).
Der Code dafür ist immer noch recht einfach:
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *innerButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 22, 22)];
[innerButton setImage:[UIImage imageNamed:@"share"] forState:UIControlStateNormal];
[innerButton addTarget:self action:@selector(shareTap:) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:innerButton];;
}
- (void)shareTap:(UIButton *)button {
self.popover = [[UIPopoverController alloc] initWithContentViewController:[[UIViewController alloc] init]];
// CGRect bottomCenter = CGRectMake(button.frame.size.width/2, button.frame.size.height, 1, 1);
CGRect bottomCenter = CGRectMake(2, button.frame.size.height, 1, 1);
[self.popover presentPopoverFromRect:bottomCenter inView:button permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
Hinweis hier, dass stattdessen das eigentliche Zentrum der Verwendung habe ich den beliebigen Wert verwendet, 2. Wenn ich 1 verwenden oder 0, wird das Popover linksbündig. Alles Größer als Eins ist wieder richtig ausgerichtet.
ich um ein wenig nach einer ähnlichen Frage suchen, aber ich kann nicht scheinen, jemanden mit dem gleichen Problem zu finden. Irgendeine Idee um, was verursacht, oder wie man es vermeidet, würde sehr geschätzt werden. Das Einzige, was ich erraten habe, ist, dass Apple aufgrund seiner Nähe zum Rand etwas Voodoo positioniert, um es dahin zu zwingen, wo sie es haben wollen. Das Problem ist, dass die Schaltfläche oben rechts wie eine normale Drop-Down-Position aussieht.
Bearbeiten: Ich habe das gleiche Verhalten bei einem langen Druck auf das Symbol "Neue Nachricht" in der nativen Mail App bestätigt.
Edit 2: Ich konnte mit Apple bestätigen, dass dies ein Problem ist. In einer der neueren Versionen (ich kann mich nicht erinnern, welche, eine der 9 ich denke), sie haben es so gemacht, dass Sie dies manuell einstellen können. Das Standardverhalten ist immer noch falsch, glaube ich (ich habe das eine Weile nicht versucht), aber Sie können die CGRect-Offset-Methode verwenden, damit es richtig funktioniert, sollten Sie so geneigt sein.
Versuchen Sie, diese UIBarButtonItem Taste * = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAction Ziel: Selbst Aktion: @selector (shareTap :)]; – Nishant
Könnten Sie vielleicht ein bisschen mehr erklären?Durch die Verwendung eines Systemelements wird die Platzierung der Schaltfläche nicht automatisch behoben. In meiner Bearbeitung habe ich erwähnt, dass die Standard-Apps auch das Problem (Mail) aufweisen, bei dem vermutlich System-Icons verwendet werden. – shortstuffsushi