Bir projede, sağdaki bir bar düğmesi üzerindeki bir popover'ın konumlandırmasının bir nedenden dolayı sağda olduğu anlaşılıyor. Özel görünüm için bir UIButton kullanarak denedim, daha sonra bu düğmeden popover'ı sunmayı denedim, ancak aslında 'ortalanmış' değerle sağladığımda pop-up showFromRect'i göz ardı ediyor gibi görünüyor.UIPopover presentFromBarButton merkezi
Bunun arkasındaki kod oldukça basittir: Ben de belirtildiği gibi, iç düğmesini kullanarak geçerseniz,
- (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];
}
Şimdi, benzer bir davranışla (not renk değişimi böylece görüntü gösterir).
bu kodu hala oldukça basittir: Ben 1 kullanırsanız
- (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];
}
burada Not yerine gerçek merkezini kullanarak, ben keyfi değerini, 2. kullandım veya 0, popover sola hizalanmış olur. Birden fazla olan herhangi bir şey tekrar hizalanmış.
Düzenleme: Bu davranışın, yerel Posta uygulamasında "Yeni İleti" simgesine uzun basışla gerçekleştiğini doğruladım.
Düzenleme 2: Apple ile bunun bir sorun olduğunu onayladım. Daha yeni versiyonlardan birinde (hangisini hatırlıyorum, 9'lardan birini düşünüyorum), bunu manuel olarak ayarlayabilmeniz için yaptılar. Varsayılan davranış hala yanlıştır (bunu bir süredir denemedim), ancak doğru bir şekilde çalışabilmeniz için CGRect ofset yöntemini kullanabilirsiniz, bu nedenle eğimli olmalısınız.
bu UIBarButtonItem * düğmesine deneyin = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAction hedef: self eylemi: @selector (ShareTap :)]; – Nishant
Belki biraz daha açıklayabilir misiniz?Bir sistem öğesinin kullanılması, düğme yerleşimini kendi başına düzeltmez ve düzenlememde varsayılan uygulamaların, muhtemelen sistem simgelerini kullanan sorunu da (Mail) gösterdiğinden bahsetmiştim. – shortstuffsushi