UITabBarItem Görüntüsü aşağı taşınıyor mu?


98

Normalde a'nın her sekmesinde UITabBarküçük bir resminiz ve sekmeyi adlandıran bir başlığınız olur. Resim, altındaki başlığı barındırmak için sekmenin üstüne doğru konumlandırılır / ortalanır. Sorum şu: sadece bir resim içeren bir TabBar'a sahip olmak istiyorsanız ve başlığı yoksa, sekme içinde daha iyi ortalanmasını sağlamak için resmi aşağı taşımanın bir yolu yok mu?

Şu anda kullanıyorum (aşağıya bakın):

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

ancak başlığı olmayan daha büyük bir görüntü kullanmayı tercih ederim, şu anda görüntüyü yaklaşık 70 piksel @ 2x'ten daha büyük yaparsam UITabBar, altta çok fazla kullanılmayan alan bırakırken üstünden kenarlara doğru kaymaya başlar .

Yanıtlar:


180

tabBarItem'S' i ayarlamayı imageInsets(simge görüntüsünü taşımak için) ve denetleyici başlığını sıfır olarak ayarlamayı deneyin (böylece başlık görüntülenmez). Görünüm denetleyicisine şuna -initveya -viewDidLoadyönteme benzer bir şey koyun :

Amaç-C

self.tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
self.title = nil;

Swift

self.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
self.title = nil

UITabBarItembir alt sınıfıdır UIBarItemsahip olan UIEdgeInsets imageInsetsözellik. İyi görünene kadar eklerle biraz oynayın (sekme çubuğu simge resimlerinize bağlı olarak)


3
@Lukas: ama bu görüntüleri küçültür.
Sourabh Bhardwaj

1
@Sourabh onları benim için
küçültmüyor

7
Piksel mükemmelliğine ihtiyacınız varsa gerçek iç değer 5.5f'dir.
kullanıcı

1
@ rr1g0 Rozeti özel konuma taşımak mümkün değildir. Bir rozetin özel konumuna veya özel rozet görünümüne ihtiyacınız varsa, bunu kendiniz uygulamalısınız
Lukas Kukacka

1
@Sourabh, görüntüyü küçültmemek için alt kısmı negatif bir değerle dengelemelisiniz.
Rmalmoe

150

Bunu film şeridi aracılığıyla da yapabilirsiniz. Tabbariteminizi seçin, boyut denetçisine gidin ve uygun ekleri atayın.

görüntü açıklamasını buraya girin

* Xcode, Sürüm 7.3.1 (7D1014) üzerinde gösterilmiştir


güzel ve temiz!
ken

Tüm cevapların en iyisi ... Çok teşekkür ederim @Neil Galiaskarov
Venkatesh Chejarla

49

Bir alt sınıf oluşturun UITabBarControllerve içinde viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.viewControllers enumerateObjectsUsingBlock:^(UIViewController *vc, NSUInteger idx, BOOL *stop) {
        vc.tabBarItem.title = nil;
        vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0);
    }];
}

Swift 3:

for vc in self.viewControllers! {
    vc.tabBarItem.title = nil
    vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}

bu benim için çalıştı. sadece hızlı için enumerateObjectsUsingBlock yöntemi artık kullanılamıyor
Junchao Gu

alt sınıflandırma yapmayın, bunun yerine bunu AppDelegate'inize koyun
Laszlo

1
Bu pasajı yerleştirmek AppDelegatede işe yarar , ancak açıkça alt sınıflara ayırmaktan daha iyi değildir. Yine de kendi tercihinize sahip olabilirsiniz :)
Brian

10

Xamarin kullanıyorsanız, bu çalışır:

screen.TabBarItem.ImageInsets = new UIEdgeInsets(5, 0, -5, 0);
screen.TabBarItem.Title = "";

10

Bu benim için çalıştı

Swift 4

let array = tabBarController?.customizableViewControllers
for controller in array! {
    controller.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}

2

SWIFT 3.0

Görüntü ağlarını, tasarıma göre üst, sol, alt ve sağ olarak ayarlayabilirsiniz.

self.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: 0, right: 0)

2

İOS 11 için, ImageInsets'i ayarlamak dışında TraitCollection yöntemini geçersiz kılmanız gerekir . Lütfen yöntemi alt sınıflı UITabBarController sınıfınıza ekleyin

public override UITraitCollection TraitCollection {
 get {
  return UITraitCollection.FromHorizontalSizeClass(horizontalSizeClass: UIUserInterfaceSizeClass.Compact);
 }
}

İPad ve iOS 11'de sekme çubuğu öğesi için görüntü konumuyla ilgili bir sorunu çözmeme yardımcı olan iyi bir ipucu. Ancak özellik koleksiyonunu görüntüleme denetleyicisi düzeyinde geçersiz kılmak çok zordur, UITabBar sınıfını alt sınıflara ayırmak ve traitCollection özelliğini geçersiz kılmak daha iyidir Orada. Ayrıca, yalnızca yatay sınıfla bir özellik koleksiyonunun döndürülmesi, diğer özellik toplama özelliklerini düşürür. return UITraitCollection(traitsFrom: [ super.traitCollection, UITraitCollection(horizontalSizeClass: .compact)])benim için hile yaptı.
Emmanuel Paris

1

In Swift 4.2 , UIEdgeInsetsMakeBULUNMADI edilir bunun yerine kullanmalısınız UIEdgeInsets,

let array = tabBarController?.customizableViewControllers
    for controller in array! {
        controller.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.