2011-01-17 15 views
31

Yatay solukluğu, özel sol ve sağ UINavigationBar öğelerinin solunda ve sağında nasıl kaldırabilirim? IOS'un varsayılan olarak ayarladığı 10 nokta dolgu görünüyor.Varsayılan yatay dolgu olmadan gezinti çubuğuna özel bir görünüm tabanlı UIBarButtonItem yerleştirme

Sol ve sağ gezinme çubuğu düğmelerini özelleştiriyorum (kendi backButtonItem'i ayarladığım için vazgeçtim, bu yüzden sadece leftBarButtonItem'i kullanıyorum).

Her iki durumda da (sol veya sağ), bu özel düğmelere basmak, Apple'ın solBarButtonItem öğesinin solunda ve sağBarButtonItem öğesinin sağında bir miktar dolguyu koruduğunu gösterir; ne kadar geniş olursa olsun, UIButton'un özel arka plan ve görüntü özelliklerini, özel görünümü olarak sol/sağ çubuk düğme öğesine yerleştiririm.

UIBarButtonItems'in erişemediğim bir "çerçeve" bulunmadığından, onları UIViews gibi normal görünümlerinde konumlandıramıyorum.

Bu varsayılan doldurmanın nasıl kaldırılacağı konusunda öneriniz var mı? Sıfır genişliğini azaltmaya çalıştığım biti görmek için ekran görüntüsüne bakın. Ekran görüntüsünde, artı simgesi sağa kaydırıldı çünkü ben ona bir özet verdim; ama aynı zamanda, bu girintiyi de kullanması beklenen vurgulanmış arka plan resmi, sağ tarafında kırpılıyor).

Bkz görüntü de :

- (UIBarButtonItem *)customAddButtonItemWithTarget:(id)target action:(SEL)action { 
    UIButton *customButtonView = [UIButton buttonWithType:UIButtonTypeCustom]; 

    customButtonView.frame = CGRectMake(0.0f, 0.0f, 45.0f, 44.0f); 

    [customButtonView setBackgroundImage: 
     [UIImage imageNamed:@"bgNavBarButton-OutsideRight-Normal.png"] 
     forState:UIControlStateNormal]; 
    [customButtonView setBackgroundImage: 
     [UIImage imageNamed:@"bgNavBarButton-OutsideRight-Highlighted.png"] 
     forState:UIControlStateHighlighted]; 

    [customButtonView setImage: 
     [UIImage imageNamed:@"bgNavBarButton-Add-Normal.png"] 
     forState:UIControlStateNormal]; 
    [customButtonView setImage: 
     [UIImage imageNamed:@"bgNavBarButton-Add-Highlighted.png"] 
     forState:UIControlStateHighlighted]; 

    [customButtonView addTarget:target action:action 
     forControlEvents:UIControlEventTouchUpInside]; 

    UIBarButtonItem *customButtonItem = [[[UIBarButtonItem alloc] 
     initWithCustomView:customButtonView] autorelease]; 
    [customButtonView setImageEdgeInsets:UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f)]; 

    //customButtonItem.imageInsets = UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f); 

    return customButtonItem;  
} 
+0

+1: Ben bu sorunu vardı ve bir dizi şey denedim ... insets dahil olmak üzere, ve sadece x pozisyonunda -10 görüntü yapma ve vb.şansı yok küçük bir dolguyu tuttum ve redid Görüntü daha uygun hale getirmek için. iyi şanslar. –

cevap

82

55Alar, yukarıda bahsettiğim çözümle, bu cevaba farklı, ama çok ilgili bir soruya dayanmaktadır: How to adjust UIToolBar left and right padding. Ayrıca, sadece bir tanesi yerine, sol veya sağ tarafta birden çok düğme ayarlamanıza olanak veren iOS5 (ve buna bağlı olarak) tarafından kolaylaştırılır.

İşte özel bıraktı düğme öğenin solundaki dolgu kaldırılması bir örnek:

UIBarButtonItem *backButtonItem // Assume this exists, filled with our custom view 

// Create a negative spacer to go to the left of our custom back button, 
// and pull it right to the edge: 
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace 
    target:nil action:nil]; 
negativeSpacer.width = -5; 
// Note: We use 5 above b/c that's how many pixels of padding iOS seems to add 

// Add the two buttons together on the left: 
self.navigationItem.leftBarButtonItems = [NSArray 
    arrayWithObjects:negativeSpacer, backButtonItem, nil]; 

Ve bununla

, bir gezinme çubuğunda sol çubuğu düğme öğesi için sol dolgular, gitti!

NOT NOT: Bu, iOS5 ve iOS6'da benim için çalıştı. IOS7'nin önemli ölçüde farklı olduğu (genel demolardan) göz önüne alındığında, iOS7'nin erken tohumlarına sahip olanlarınız, bu kesmek gibi istenmeyen bir şeyin gerçekten iOS6'nın ötesinde sizin için çalışmaya devam edip edemeyeceğini test etmelidir.

+7

Ayrıca, siparişi değiştirmeden rightBarButtonItems için de çalışır (backButtonItem & negativeSpace öğesinin sırasını tersine çevirmeye çalışabilirdiniz, ancak bu değil) – Martin

+0

Bunun için teşekkürler! – chourobin

+0

Bu adam için gerçekten teşekkürler! :) –

3

Bunu denedim ve çalışıyor: Ben özel UIBarButtonItem oluşturuyorsam nasıl Başvuru için https://skitch.com/starbaseweb/rj2e5/ios-simulator

, burada (bunun doğru düğme bu durumda var) : 1 -drawRect öğesinde hiçbir şey yapmayan özel bir UIToolbar alt sınıfı oluşturun: opak değil ve backgroundColor = [UIColor clearColor].

2) Özel görünüm olarak araç çubuğuna sahip özel bir UIBarButtonItem oluşturun.

3) Düğmelerinizi özel araç çubuğuna ekleyin.

4) Özel araç çubuğunuzdaki geçersiz kılma - OturumuYazdır ve kendi aralığınızı yapın.

+0

Başka bir hile de, navigasyon çubuğunu bir şekilde görünümden daha geniş bir şekilde yapabilmenizdir, bu yüzden sağdaki dolgu kırpılır ve düğmeniz doğru yerde görünür! Bu, yalnızca UINavigationBar'ı doğrudan yönetiyorsanız, yani bir navigasyon denetleyicisinden değilken çalışır. –

+0

Teşekkürler Evadne. Bunu geçici bir çözümle değiştirdim, ancak önerilen yanıtı onaylamak için bu yayın sürümüne geri dönmeyi deneyeceğim, böylece kabul edilen yanıt olarak işaretleyebilirim. – idStar

+0

iOS5 ile daha temiz bir uygulama buldum. Buradaki cevaba bakınız: http://stackoverflow.com/questions/6021138/how-to-adjust-uitoolbar-left-and-right-padding/7042201#7042201 Bu çözümü test ettim ve işe yaradı. İki satır kod ve en az müdahaleci. – idStar