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ış.
Ben benzer bir soruya arayan biraz etrafına aradım ama aynı sorunla kimseyi bulmak için görünmüyor olabilir. Bunun neden olduğu ya da bundan nasıl kaçınılacağı ile ilgili herhangi bir fikir büyük ölçüde takdir edilecektir. Tahmin edemediğim tek şey, kenara yakınlığı nedeniyle Apple'ın istediği yerde zorlamak için bazı konumlandırma vudularını yapmasıdır. Sorun, sağ üst köşedeki düğmenin oldukça standart bir açılır menü gibi görünmesidir.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