2013-04-29 40 views
71

通常在UITabBar的每個選項卡上都有一個小圖像和一個標題來命名選項卡。圖像朝向標籤頂部定位/居中以容納下方的標題。我的問題是:如果你想有一個tabBar只有一個圖像,沒有標題是否有辦法將圖像向下移動,使它在標籤中更好地居中?將UITabBarItem圖像向下移動?

我使用(見下文)目前:

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected]; 

但我們更希望,如果我掙的比約70pixels的圖像更大的使用到較大的圖像,沒有標題,此刻@ 2倍就開始邊關閉UITabBar的頂部,同時在底部留下很多未使用的空間。

回答

141

嘗試調整tabBarItemimageInsets(用於移動圖標圖像)並將控制器標題設置爲零(因此不顯示標題)。把這樣的事情-init-viewDidLoad方法在視圖控制器:

目標C

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

夫特

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

UITabBarItemUIBarItem具有UIEdgeInsets imageInsets特性的子類。發揮一點與插圖,直到它看起來好(這取決於您的TabBar圖標圖像)

+0

這解決了我的問題。我製作了UITabBarController的一個子類並迭代了self.tabBar.items。 – Fogh 2013-10-14 11:09:58

+3

@Lukas:但這縮小了圖像。 – Sourabh 2014-01-10 06:38:34

+1

@Sourabh不會爲我縮小它 – TigerCoding 2014-03-13 16:03:46

41

使UITabBarController一個子類,並在其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); 
    }]; 
} 

斯威夫特3:

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

這爲我工作。只是對於swift方法enumerateObjectsUsingBlock不可用 – 2015-06-21 06:54:27

+0

不是子類,而是將其放入您的AppDelegate – Laszlo 2016-04-22 14:13:17

+0

將此代碼片段放入'AppDelegate'中也可以工作,但它並不比子類化好。你可以有自己的喜好:) – Brian 2016-04-25 03:26:28

9

如果您使用Xamarin,則可以運行:

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

您可以通過故事板也是。選擇你的tabbaritem,去大小檢查員並分配適當的插頁。

enter image description here

*,根據版本7.3.1(7D1014)

+0

真棒!!!!!!!!!! – Mirko 2017-11-11 19:41:23

+0

不錯,乾淨! – ken 2017-11-24 13:58:40

0

SWIFT 3.0

您可以設置圖像lnsets,機頂,左側底部和右側展示的Xcode中德興。

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

對於iOS 11,你需要從設置ImageInsets除了覆蓋TraitCollection方法。 請在您的子類UITabBarController類中添加該方法

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

好的提示,幫助我解決了與iPad和iOS 11上標籤欄項目的圖像位置相關的問題。但是,在視圖控制器級別重寫特徵集合太過於苛刻,最好是繼承UITabBar類並覆蓋traitCollection財產那裏。同時僅返回一個只包含水平類的特徵集合,將放棄其他特徵集合屬性。 '返回UITraitCollection(traitsFrom:[super.traitCollection,UITraitCollection(horizo​​ntalSizeClass:.compact)])'爲我做了詭計。 – 2018-01-09 20:30:47