8

tercih edilen stili UIAlertControllerStyleAlert ile oluşturdum. Uyarı, leftBarButtonItem'a dokunduğunda gösterilir. backButton adlı UIBarButtonItem özelliğini oluşturdum ve leftBarButtonItem = self.backButton'u ayarlayın. Bu tasarlandığı gibi çalışıyor. Ben storyboard kullanmıyorum.UIAlertController leftBarButtonItem aşağı hareket eder

Sorun şu ki, uyarı görüntülendiğinde leftBarButtonItem aşağı doğru hareket ediyor (tahminim yaklaşık 20pts). Bu neden oluyor?

Düğmenin nasıl görüneceğini/gizlendiğini biliyorum, böylece kullanıcı aşağı doğru hareket ettiğinde düğmeyi göremez. Ancak, bu berbat. Neden ilk etapta oluyor?

online herhangi benzer konular bulamadı. viewDidLoad

@property (strong, nonatomic) IBOutlet UIBarButtonItem *backButton; 

:

self.backButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonPressed)]; 
[self.backButton setImage:[UIImage imageNamed:@"back-arrow-grey"]]; 
self.navigationItem.leftBarButtonItem = self.backButton; 

backButtonPressed içinde:

{ 
    self.navigationItem.leftBarButtonItem = nil; //to hide backButton because it moves down 
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"My title" preferredStyle:UIAlertControllerStyleAlert]; 

    UIAlertAction *actionLeave = [UIAlertAction actionWithTitle:@"Leave" style:UIAlertActionStyleDefault handler:...//which works correctly 

    UIAlertAction *actionCancel = [UIAlertAction actionWithTitle:@"Go back" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
     self.navigationItem.leftBarButtonItem = self.backButton; //to show backButton again now that the alert is dismissed 
     //other things happen here that work as designed 
    }]; 

    [alertController addAction:actionLeave]; 
    [alertController addAction:actionCancel]; 
    [self presentViewController:alertController animated:YES completion:^{}]; 
} 
+1

Hiçbir fikrim yok, ama 20pts bana durum çubuğunun boyutudur, bu yüzden bakacağım ilk yer burası. – dstudeba

cevap

13

Ben de bu sorunu yaşamıştır. Sol çubuk düğme öğesinin dikey yanlış konumlandırması ile ilgili diğer sorunları aramak beni this question'a götürdü. Bu sorunun nedeni, bilinmeyen sebeplerle, bir görüntü içeren bir bar düğme öğeniz varsa, ancak başlık olarak boş bir dize oluşuyorsa bu sorunun ortaya çıkmasıdır. bunun yerine sadece boş bir dize tek uzaya başlık belirleyin: Sizin için bunu düzeltmek eğer

self.backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:self action:@selector(backButtonPressed)]; 

Bilmiyorum, ama daha çok benim için yaptı - düğmesi hala hafif bir 'atlama' yapar Animasyon yeni yaratılıyormuş gibi (ama sadece ilk göründüğü zaman) - ama aynı dikey pozisyonda kalıyor.

Düzenleme: başlık olarak nil Pas da yabancı animasyon kaldırır. Görünüşe göre bu, iOS'un boşluk dizilerini başlıklar olarak nasıl ele aldığının bir özelliği.

+3

nil ayarlandı. Çok teşekkürler! Ne inanılmaz garip bir böcek. = D – jungledev

+1

Bu hatayı sadece AlertController ile yakalamadım. Çok teşekkürler. – Andrew

+1

Düzeltmenin başlığa değer ataması çok garip. Yardım için teşekkürler! – BlackHatSamurai

1
barbutton.title = nil; 

Başlığı nil olarak ayarlayın ve bu çalışma benim için.