Memindahkan Gambar UITabBarItem ke bawah?

98

Biasanya pada setiap tab a UITabBarAnda memiliki gambar kecil dan judul yang memberi nama tab. Gambar diposisikan / di tengah ke bagian atas tab untuk mengakomodasi judul di bawahnya. Pertanyaan saya adalah: jika Anda ingin memiliki tabBar hanya dengan gambar dan tanpa judul, adakah cara untuk memindahkan gambar ke bawah sehingga lebih baik berada di tengah tab?

Saya menggunakan (lihat di bawah) saat ini:

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

tetapi lebih suka menggunakan gambar yang lebih besar tanpa judul, pada saat ini jika saya membuat gambar lebih besar dari sekitar 70 piksel @ 2x, gambar itu mulai merayap di bagian atas UITabBarsambil menyisakan banyak ruang yang tidak terpakai di bagian bawah.

fuzzygoat
sumber

Jawaban:

179

Coba sesuaikan tabBarItem's imageInsets(untuk memindahkan gambar ikon) dan pengaturan judul pengendali nihil (sehingga tidak ada judul yang ditampilkan). Letakkan sesuatu seperti ini ke -initatau -viewDidLoadmetode di pengontrol tampilan:

Objective-C

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

Cepat

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

UITabBarItemmerupakan subclass UIBarItemyang memiliki UIEdgeInsets imageInsetsproperti. Mainkan sedikit dengan insets sampai terlihat bagus (tergantung pada gambar ikon tabbar Anda)

Lukas Kukacka
sumber
3
@ Lukas: tapi gambar ini menyusut.
Sourabh Bhardwaj
1
@Sourabh Tidak mengecilkannya untuk saya
TigerCoding
7
Nilai inset sebenarnya adalah 5.5f jika Anda membutuhkannya untuk menjadi piksel sempurna.
pengguna
1
@ rr1g0 Memindahkan lencana ke posisi kustom tidak dimungkinkan. Jika Anda memerlukan posisi khusus dari lencana atau tampilan lencana khusus, Anda harus menerapkannya sendiri
Lukas Kukacka
1
@Sourabh Anda harus mengimbangi bagian bawah dengan nilai negatif untuk tidak mengecilkan gambar.
Rmalmoe
150

Anda juga bisa melakukannya melalui storyboard. Pilih tabbaritem Anda, buka pemeriksa ukuran dan tetapkan insets yang sesuai.

masukkan deskripsi gambar di sini

* Didemonstrasikan di Xcode, Versi 7.3.1 (7D1014)

Neil Galiaskarov
sumber
bagus dan bersih!
ken
Terbaik dari semua jawaban ... Terima kasih banyak @Neil Galiaskarov
Venkatesh Chejarla
49

Buat subkelas dari UITabBarController, dan di dalamnya 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);
    }];
}

Cepat 3:

for vc in self.viewControllers! {
    vc.tabBarItem.title = nil
    vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}
Brian
sumber
ini berhasil untuk saya. hanya saja untuk cepat metode enumerateObjectsUsingBlock tidak tersedia lagi
Junchao Gu
jangan membuat subkelas, melainkan masukkan ini ke AppDelegate Anda
Laszlo
1
memasukkan cuplikan ini AppDelegatejuga berfungsi, tetapi tidak jelas lebih baik daripada membuat subkelasnya. Anda dapat memiliki preferensi Anda sendiri :)
Brian
10

Jika Anda menggunakan Xamarin, ini berfungsi:

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

Ini berhasil untuk saya

Cepat 4

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

SWIFT 3.0

Anda dapat mengatur lnsets gambar, mengatur atas, kiri, bawah dan kanan sesuai desing.

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

Untuk iOS 11 Anda perlu mengganti metode TraitCollection selain mengatur ImageInsets. Tambahkan metode di kelas UITabBarController subclass Anda

public override UITraitCollection TraitCollection {
 get {
  return UITraitCollection.FromHorizontalSizeClass(horizontalSizeClass: UIUserInterfaceSizeClass.Compact);
 }
}
Prashant
sumber
Tip bagus yang membantu saya memecahkan masalah yang terkait dengan posisi gambar untuk item tab bar di iPad dan iOS 11. Tetapi terlalu sulit untuk menimpa koleksi sifat pada tingkat pengontrol tampilan, lebih baik untuk membuat subkelas kelas UITabBar dan mengganti properti traitCollection sana. Juga mengembalikan koleksi sifat dengan hanya kelas horizontal, akan melepaskan properti koleksi sifat lainnya. return UITraitCollection(traitsFrom: [ super.traitCollection, UITraitCollection(horizontalSizeClass: .compact)])melakukan trik untuk saya.
Emmanuel Paris
1

Di Swift 4.2 , UIEdgeInsetsMakeitu depricated, sebagai gantinya kita harus menggunakan UIEdgeInsets,

let array = tabBarController?.customizableViewControllers
    for controller in array! {
        controller.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
    }
Bappaditya
sumber