2014-10-25 21 views
5

'de arka düğme metninin dikey konumunu değiştirin Arka düğme simgesinin dikey konumunu değiştirdim ancak metni değiştiremedim.UINavigationBar

Ben UINavigationBar içinde layoutSubviews yöntemini kullanıyorum:

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    BOOL fixed = NO; 
    NSArray *classNamesToReposition = @[@"_UINavigationBarBackIndicatorView", @"UINavigationButton", @"UINavigationItemButtonView"]; 
    for (UIView *view in [self subviews]) { 
     if ([classNamesToReposition containsObject:NSStringFromClass([view class])] && !fixed) { 
      CGRect frame = [view frame]; 
      if ([NSStringFromClass([view class]) isEqualToString:@"_UINavigationBarBackIndicatorView"]) { 
       frame.origin.y = 14.5; 
      } else if ([NSStringFromClass([view class]) isEqualToString:@"UINavigationButton"]) { 
       frame.origin.y = 9.0; 
      } else if ([NSStringFromClass([view class]) isEqualToString:@"UINavigationItemButtonView"]) { 
       frame.origin.y = 5.0; 
      } 
      [view setFrame:frame]; 
     } 
    } 
} 

Sorun UINavigationItemButtonView gerçekleştirdiği herhangi çerçeve değişikliği herhangi bir etkisi görünmüyor, ne de üzerinde yaptığınız çerçeve değişikliği UILabel Subview olmasıdır gerçek düğme metni budur. Görünümleri kaydettiğimde çerçeveler değişiyor gibi görünüyor, ancak görünümümde metin hareket etmiyor. Neyi yanlış yapıyorum?

+0

Jack, bu kodu 'viewDidAppear: 'yerine yerleştirmeyi denediniz mi? Bir projede test ettim ve y pozisyonunu ayarladı. – carlodurso

cevap

4

MyNavigationBar adlı bir UINavigationBar alt sınıfını, layoutSubviews içinde alt sınıf olarak, arka gösterge konumunu değiştirin.

for (UIView *view in [self subviews]) { 
    CGRect frame = [view frame]; 
    if ([NSStringFromClass([view class]) isEqualToString:@"_UINavigationBarBackIndicatorView"]) { 
     frame.origin.y = 19.5; //default is 11.5, move down by 8. 
    } 
    [view setFrame:frame]; 
} 

Ve applicationDidFinished bu ekleyerek backBarItem başlık konumunu değiştirebilirsiniz.

[[UIBarButtonItem appearanceWhenContainedIn:[MyNavigationBar class], nil] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, 8) forBarMetrics:UIBarMetricsDefault]; 
+0

Bu kod blokları birbirini dışlayan münferit; konumu [UIBarButtonItem görünümWhenContainedIn ...] ile tek başına ayarlayabilir misiniz, yoksa görünümler arasında yinelemeli mi? –

+0

Hayır, her ikisini de eklemeliyim, ilki arka göstergeyi (arka ok), ikincisi backbarItem'in başlığını değiştirmektir, burada bir [örnek] (https: //www.dropbox) .com/s/uh0d7f258diynrs/VeticalPosition.zip? dl = 0) nasıl çalıştığını görmek istediğinizde. – gabbler

+0

Bu harika, ancak maalesef bu, arka okdan kendi kendine okunan metnin bağlantısını kaldırıyor.navigationItem.hidesBackButton = YES; maalesef sadece arka oku sakla. Bu ikilem için bir çözüm buldunuz mu? –

İlgili konular