UINavigationBar dan UISearchBar keduanya memiliki properti tintColor yang memungkinkan Anda mengubah warna tint (mengejutkan, saya tahu) dari kedua item tersebut. Saya ingin melakukan hal yang sama ke UITabBar di aplikasi saya, tetapi sekarang telah menemukan cara untuk mengubahnya dari warna hitam default. Ada ide?
ios
iphone
uitabbarcontroller
uitabbar
piksel
sumber
sumber
Jawaban:
Saya telah dapat membuatnya bekerja dengan membuat subclass UITabBarController dan menggunakan kelas privat:
@interface UITabBarController (private) - (UITabBar *)tabBar; @end @implementation CustomUITabBarController - (void)viewDidLoad { [super viewDidLoad]; CGRect frame = CGRectMake(0.0, 0.0, self.view.bounds.size.width, 48); UIView *v = [[UIView alloc] initWithFrame:frame]; [v setBackgroundColor:kMainColor]; [v setAlpha:0.5]; [[self tabBar] addSubview:v]; [v release]; } @end
sumber
iOS 5 telah menambahkan beberapa metode tampilan baru untuk menyesuaikan tampilan sebagian besar elemen UI.
Anda dapat menargetkan setiap instance UITabBar di aplikasi Anda dengan menggunakan proxy tampilan.
Untuk iOS 5 + 6:
[[UITabBar appearance] setTintColor:[UIColor redColor]];
Untuk iOS 7 ke atas, gunakan yang berikut ini:
[[UITabBar appearance] setBarTintColor:[UIColor redColor]];
Menggunakan proxy tampilan akan mengubah semua contoh bilah tab di seluruh aplikasi. Untuk contoh tertentu, gunakan salah satu properti baru di kelas itu:
UIColor *tintColor; // iOS 5+6 UIColor *barTintColor; // iOS 7+ UIColor *selectedImageTintColor; UIImage *backgroundImage; UIImage *selectionIndicatorImage;
sumber
Saya memiliki tambahan untuk jawaban akhir. Meskipun skema esensial benar, trik menggunakan warna transparan sebagian dapat diperbaiki. Saya berasumsi bahwa itu hanya untuk membiarkan gradien default ditampilkan. Oh, juga, tinggi TabBar adalah 49 piksel daripada 48, setidaknya di OS 3.
Jadi, jika Anda memiliki gambar berukuran 1 x 49 yang sesuai dengan gradien, ini adalah versi viewDidLoad yang harus Anda gunakan:
- (void)viewDidLoad { [super viewDidLoad]; CGRect frame = CGRectMake(0, 0, 480, 49); UIView *v = [[UIView alloc] initWithFrame:frame]; UIImage *i = [UIImage imageNamed:@"GO-21-TabBarColorx49.png"]; UIColor *c = [[UIColor alloc] initWithPatternImage:i]; v.backgroundColor = c; [c release]; [[self tabBar] addSubview:v]; [v release]; }
sumber
Saat Anda hanya menggunakan addSubview, tombol Anda akan kehilangan kemampuan untuk diklik, jadi bukannya
[[self tabBar] addSubview:v];
menggunakan:
[[self tabBar] insertSubview:v atIndex:0];
sumber
Tidak ada cara sederhana untuk melakukan ini, pada dasarnya Anda perlu membuat subclass UITabBar dan mengimplementasikan gambar kustom untuk melakukan apa yang Anda inginkan. Ini cukup merepotkan untuk mendapatkan efeknya, tetapi mungkin sepadan. Saya sarankan untuk melaporkan bug dengan Apple untuk menambahkannya ke SDK iPhone di masa mendatang.
sumber
Berikut ini adalah solusi sempurna untuk ini. Ini berfungsi dengan baik dengan saya untuk iOS5 dan iOS4.
//---- For providing background image to tabbar UITabBar *tabBar = [tabBarController tabBar]; if ([tabBar respondsToSelector:@selector(setBackgroundImage:)]) { // ios 5 code here [tabBar setBackgroundImage:[UIImage imageNamed:@"image.png"]]; } else { // ios 4 code here CGRect frame = CGRectMake(0, 0, 480, 49); UIView *tabbg_view = [[UIView alloc] initWithFrame:frame]; UIImage *tabbag_image = [UIImage imageNamed:@"image.png"]; UIColor *tabbg_color = [[UIColor alloc] initWithPatternImage:tabbag_image]; tabbg_view.backgroundColor = tabbg_color; [tabBar insertSubview:tabbg_view atIndex:0]; }
sumber
Di iOS 7:
[[UITabBar appearance] setBarTintColor:[UIColor colorWithRed:(38.0/255.0) green:(38.0/255.0) blue:(38.0/255.0) alpha:1.0]];
Saya juga merekomendasikan pengaturan terlebih dahulu tergantung pada keinginan visual Anda:
[[UITabBar appearance] setBarStyle:UIBarStyleBlack];
Gaya bilah menempatkan pemisah halus antara konten tampilan dan bilah tab Anda.
sumber
[[self tabBar] insertSubview:v atIndex:0];
bekerja dengan sempurna untuk saya.sumber
bagi saya sangat mudah untuk mengubah warna Tabbar seperti: -
[self.TabBarController.tabBar setTintColor:[UIColor colorWithRed:0.1294 green:0.5686 blue:0.8353 alpha:1.0]]; [self.TabBarController.tabBar setTintColor:[UIColor "YOUR COLOR"];
Coba ini!!!
sumber
[[UITabBar appearance] setTintColor:[UIColor redColor]]; [[UITabBar appearance] setBarTintColor:[UIColor yellowColor]];
sumber
hanya untuk warna latar belakang
Tabbarcontroller.tabBar.barTintColor=[UIColor redcolour];
atau ini di Delegasi Aplikasi
[[UITabBar appearance] setBackgroundColor:[UIColor blackColor]];
untuk mengubah warna ikon batal pilih tabbar
Untuk iOS 10:
// this code need to be placed on home page of tabbar for(UITabBarItem *item in self.tabBarController.tabBar.items) { item.image = [item.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; }
Di atas iOS 10:
// this need to be in appdelegate didFinishLaunchingWithOptions [[UITabBar appearance] setUnselectedItemTintColor:[UIColor blackColor]];
sumber
Ada beberapa ide bagus dalam jawaban yang ada, banyak yang berfungsi sedikit berbeda dan apa yang Anda pilih juga akan bergantung pada perangkat yang Anda targetkan dan jenis tampilan yang ingin Anda capai.
UITabBar
terkenal tidak intuitif saat harus menyesuaikan tampilannya, tetapi berikut beberapa trik yang dapat membantu:1). Jika Anda ingin menghilangkan overlay glossy untuk tampilan yang lebih datar, lakukan:
tabBar.backgroundColor = [UIColor darkGrayColor]; // this will be your background [tabBar.subviews[0] removeFromSuperview]; // this gets rid of gloss
2). Untuk mengatur gambar khusus ke tombol tabBar lakukan sesuatu seperti:
for (UITabBarItem *item in tabBar.items){ [item setFinishedSelectedImage:selected withFinishedUnselectedImage:unselected]; [item setImageInsets:UIEdgeInsetsMake(6, 0, -6, 0)]; }
Dimana
selected
danunselected
beradaUIImage
objek pilihan Anda. Jika Anda ingin mereka menjadi warna datar, solusi paling sederhana yang saya temukan adalah membuatUIView
dengan yang diinginkanbackgroundColor
dan kemudian mengubahnya menjadi aUIImage
dengan bantuan QuartzCore. Saya menggunakan metode berikut dalam kategori diUIView
untuk mendapatkanUIImage
dengan konten tampilan:- (UIImage *)getImage { UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [[UIScreen mainScreen]scale]); [[self layer] renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return viewImage; }
3) Terakhir, Anda mungkin ingin menyesuaikan gaya judul tombol. Melakukan:
for (UITabBarItem *item in tabBar.items){ [item setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor redColor], UITextAttributeTextColor, [UIColor whiteColor], UITextAttributeTextShadowColor, [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset, [UIFont boldSystemFontOfSize:18], UITextAttributeFont, nil] forState:UIControlStateNormal]; }
Ini memungkinkan Anda melakukan beberapa penyesuaian, tetapi masih sangat terbatas. Khususnya, Anda tidak dapat dengan bebas mengubah tempat teks ditempatkan di dalam tombol, dan tidak dapat memiliki warna berbeda untuk tombol yang dipilih / tidak dipilih. Jika Anda ingin membuat tata letak teks yang lebih spesifik, cukup atur
UITextAttributeTextColor
menjadi jelas dan tambahkan teks Anda ke dalamselected
danunselected
gambar dari bagian (2).sumber
[v setBackgroundColor ColorwithRed: Green: Blue: ];
sumber
Solusi lain (yang merupakan peretasan) adalah menyetel alfa pada tabBarController ke 0,01 sehingga hampir tidak terlihat namun masih dapat diklik. Kemudian setel kontrol ImageView di bagian bawah ujung MainWindow dengan gambar tabbar kustom Anda di bawah tabBarCOntroller alfa. Kemudian tukar gambar, ubah warna atau hightlight saat tabbarcontroller berganti tampilan.
Namun, Anda kehilangan '... more' dan menyesuaikan fungsionalitas.
sumber
Hai, Saya menggunakan iOS SDK 4 dan saya dapat menyelesaikan masalah ini hanya dengan dua baris kode dan berjalan seperti ini
tBar.backgroundColor = [UIColor clearColor]; tBar.backgroundImage = [UIImage imageNamed:@"your-png-image.png"];
Semoga ini membantu!
sumber
if ([tabBar respondsToSelector:@selector(setBackgroundImage:)]) { // ios 5 code here [tabBar setBackgroundImage:[UIImage imageNamed:@"image.png"]]; } else { // ios 4 code here CGRect frame = CGRectMake(0, 0, 480, 49); UIView *tabbg_view = [[UIView alloc] initWithFrame:frame]; UIImage *tabbag_image = [UIImage imageNamed:@"image.png"]; UIColor *tabbg_color = [[UIColor alloc] initWithPatternImage:tabbag_image]; tabbg_view.backgroundColor = tabbg_color; [tabBar insertSubview:tabbg_view atIndex:0]; }
sumber
Jawaban Swift 3.0: (dari Vaibhav Gaikwad)
Untuk mengubah warna ikon batal memilih tabbar:
if #available(iOS 10.0, *) { UITabBar.appearance().unselectedItemTintColor = UIColor.white } else { // Fallback on earlier versions for item in self.tabBar.items! { item.image = item.image?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) } }
Untuk mengubah warna teks saja:
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: .normal) UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red, for: .selected)
sumber
Swift 3 menggunakan tampilan dari Anda
AppDelegate
melakukan hal berikut:UITabBar.appearance().barTintColor = your_color
sumber