Zarówno UINavigationBar, jak i UISearchBar mają właściwość tintColor, która umożliwia zmianę koloru odcienia (co jest zaskakujące, wiem) obu tych elementów. Chcę zrobić to samo z UITabBar w mojej aplikacji, ale teraz znalazłem sposób, aby zmienić go z domyślnego czarnego koloru. Jakieś pomysły?
ios
iphone
uitabbarcontroller
uitabbar
piksel
źródło
źródło
Odpowiedzi:
Udało mi się to zrobić, tworząc podklasy UITabBarController i używając klas prywatnych:
@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
źródło
iOS 5 dodał kilka nowych metod wyglądu, aby dostosować wygląd większości elementów interfejsu użytkownika.
Możesz kierować reklamy na każde wystąpienie UITabBar w aplikacji przy użyciu serwera proxy wyglądu.
W przypadku iOS 5 + 6:
[[UITabBar appearance] setTintColor:[UIColor redColor]];
W przypadku iOS 7 i nowszych użyj następujących opcji:
[[UITabBar appearance] setBarTintColor:[UIColor redColor]];
Użycie proxy wyglądu spowoduje zmianę dowolnego wystąpienia paska kart w całej aplikacji. W konkretnym przypadku użyj jednej z nowych właściwości tej klasy:
UIColor *tintColor; // iOS 5+6 UIColor *barTintColor; // iOS 7+ UIColor *selectedImageTintColor; UIImage *backgroundImage; UIImage *selectionIndicatorImage;
źródło
Mam dodatek do ostatecznej odpowiedzi. Chociaż podstawowy schemat jest poprawny, sztuczka polegająca na użyciu częściowo przezroczystego koloru może zostać ulepszona. Zakładam, że to tylko po to, aby pokazać domyślny gradient. Och, także wysokość TabBar wynosi 49 pikseli zamiast 48, przynajmniej w systemie OS 3.
Tak więc, jeśli masz odpowiedni obraz 1 x 49 z gradientem, to jest wersja viewDidLoad, której powinieneś użyć:
- (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]; }
źródło
Kiedy użyjesz tylko addSubview, twoje przyciski stracą klikalność, więc zamiast
[[self tabBar] addSubview:v];
posługiwać się:
[[self tabBar] insertSubview:v atIndex:0];
źródło
Nie ma prostego sposobu, aby to zrobić, po prostu musisz podklasować UITabBar i zaimplementować niestandardowy rysunek, aby zrobić to, co chcesz. To sporo pracy na efekt, ale może warto. Zalecam zgłoszenie błędu w Apple, aby dodać go do przyszłego zestawu SDK iPhone'a.
źródło
Oto idealne rozwiązanie tego problemu. Działa to dobrze ze mną na iOS5 i 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]; }
źródło
W systemie iOS 7:
[[UITabBar appearance] setBarTintColor:[UIColor colorWithRed:(38.0/255.0) green:(38.0/255.0) blue:(38.0/255.0) alpha:1.0]];
Polecam również ustawienie najpierw w zależności od twoich wizualnych pragnień:
[[UITabBar appearance] setBarStyle:UIBarStyleBlack];
Styl paska zapewnia subtelny separator między zawartością widoku a paskiem kart.
źródło
[[self tabBar] insertSubview:v atIndex:0];
u mnie działa idealnie.źródło
dla mnie bardzo łatwo jest zmienić kolor Tabbar, na przykład: -
[self.TabBarController.tabBar setTintColor:[UIColor colorWithRed:0.1294 green:0.5686 blue:0.8353 alpha:1.0]]; [self.TabBarController.tabBar setTintColor:[UIColor "YOUR COLOR"];
Spróbuj tego!!!
źródło
[[UITabBar appearance] setTintColor:[UIColor redColor]]; [[UITabBar appearance] setBarTintColor:[UIColor yellowColor]];
źródło
tylko dla koloru tła
Tabbarcontroller.tabBar.barTintColor=[UIColor redcolour];
lub to w delegacie aplikacji
[[UITabBar appearance] setBackgroundColor:[UIColor blackColor]];
do zmiany koloru odznaczenia ikon na pasku kart
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]; }
Powyżej iOS 10:
// this need to be in appdelegate didFinishLaunchingWithOptions [[UITabBar appearance] setUnselectedItemTintColor:[UIColor blackColor]];
źródło
W istniejących odpowiedziach jest kilka dobrych pomysłów, wiele z nich działa nieco inaczej, a wybór zależy również od tego, na które urządzenia celujesz i jaki wygląd chcesz osiągnąć.
UITabBar
jest notorycznie nieintuicyjny, jeśli chodzi o dostosowywanie wyglądu, ale oto kilka innych sztuczek, które mogą pomóc:1). Jeśli chcesz pozbyć się błyszczącej nakładki, aby uzyskać bardziej płaski wygląd, wykonaj:
tabBar.backgroundColor = [UIColor darkGrayColor]; // this will be your background [tabBar.subviews[0] removeFromSuperview]; // this gets rid of gloss
2). Aby ustawić niestandardowe obrazy na przyciskach tabBar, wykonaj coś takiego:
for (UITabBarItem *item in tabBar.items){ [item setFinishedSelectedImage:selected withFinishedUnselectedImage:unselected]; [item setImageInsets:UIEdgeInsetsMake(6, 0, -6, 0)]; }
Gdzie
selected
iunselected
sąUIImage
wybrane przez Ciebie obiekty. Jeśli chcesz, aby miały jednolity kolor, najprostszym rozwiązaniem, które znalazłem, jest utworzenieUIView
żądanego,backgroundColor
a następnie renderowanie go na aUIImage
za pomocą QuartzCore. Używam następującej metody w kategorii,UIView
aby uzyskaćUIImage
z zawartością widoku:- (UIImage *)getImage { UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [[UIScreen mainScreen]scale]); [[self layer] renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return viewImage; }
3) Na koniec możesz dostosować stylizację tytułów przycisków. Zrobić:
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]; }
Pozwala to na wprowadzenie pewnych korekt, ale nadal jest dość ograniczone. W szczególności nie możesz dowolnie modyfikować miejsca umieszczenia tekstu w przycisku i nie możesz mieć różnych kolorów dla wybranych / niezaznaczonych przycisków. Jeśli chcesz uzyskać bardziej szczegółowy układ tekstu, po prostu ustaw
UITextAttributeTextColor
go na wyraźny i dodaj tekst do obrazówselected
iunselected
z części (2).źródło
[v setBackgroundColor ColorwithRed: Green: Blue: ];
źródło
Innym rozwiązaniem (które jest hackem) jest ustawienie alfa na tabBarController na 0,01, tak aby była praktycznie niewidoczna, ale nadal klikalna. Następnie ustaw kontrolkę ImageView na dole końcówki MainWindow z niestandardowym obrazem paska kart pod oznaczonym alfabetem tabBarCOntroller. Następnie zamień obrazy, zmień kolory lub podświetlić, gdy kontroler tabulatorów przełącza widoki.
Jednak tracisz „... więcej” i dostosowujesz funkcjonalność.
źródło
Cześć. Używam zestawu SDK 4 systemu iOS i udało mi się rozwiązać ten problem za pomocą zaledwie dwóch wierszy kodu i wygląda to tak
tBar.backgroundColor = [UIColor clearColor]; tBar.backgroundImage = [UIImage imageNamed:@"your-png-image.png"];
Mam nadzieję że to pomoże!
źródło
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]; }
źródło
Odpowiedź Swift 3.0: (z Vaibhav Gaikwad)
Aby zmienić kolor odznaczenia ikon na pasku kart:
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) } }
Tylko do zmiany koloru tekstu:
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: .normal) UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red, for: .selected)
źródło
Swift 3 używając wyglądu z twojego
AppDelegate
wykonaj następujące czynności:UITabBar.appearance().barTintColor = your_color
źródło