1

У меня возникли проблемы с получением пользовательского стиля для моего UINavigationBar, установленного в подклассе UIViewController.Укладка для UINavigationBar не работает в UIViewController

У меня было это раньше, и я не уверен, почему он не работает здесь.

У меня есть следующий код на моем взгляде контроллере:

- (void) loadView { 
    [super loadView]; 

    CGRect frame = self.view.bounds; 

    navBar = [[UINavigationBar alloc] initWithFrame:frame]; 
    frame.size = [navBar sizeThatFits:frame.size]; 
    [navBar setFrame:frame]; 
    [navBar setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 

    // The following styling has no effect: 
    [navBar setBarTintColor:[UIColor blackColor]]; 
    [navBar setTintColor:[UIColor grayColor]]; 

    NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
     [UIColor whiteColor],NSForegroundColorAttributeName, nil]; 
    [[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes]; 

    UIBarButtonItem * button = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay 
     target:self 
     action:@selector(nextView:)];                                       

    [[self navigationItem] setRightBarButtonItem:button]; 
    [button release]; 
    [navBar setItems:[NSArray arrayWithObject:self.navigationItem]]; 

    [self.view addSubview:navBar]; 

} 
+0

это подкласс UIViewController до точки, где давайте называть этот подкласс CustomViewController таким образом, что все ваши viewcontrollers из класса типа «customviewcontroller»? – Loxx

+0

Если это так, то я могу показать вам, как это сделать, программно, на самом деле у меня есть пример метода, сидящего здесь где-то прямо сейчас, но он сложный, и я не хочу смущать вас, если это не так, t что вы имеете в виду – Loxx

ответ

0

Вы не должны связываться с UINavigationBar по инициализации нового и добавить его в качестве подвида. Вместо этого используйте возможности UINavigationBar.appearance:

UINavigationBar.appearance.barTintColor = UIColor.blackColor; 
UINavigationBar.appearance.tintColor = UIColor.grayColor; 

Пожалуйста, обратите внимание, что это меняет внешний вид UINavigationBar везде в приложении, поэтому appearance. Если это не то, что вы хотите, вы можете попробовать:

self.navigationController.navigationBar.barTintColor = UIColor.blackColor; 
self.navigationController.navigationBar.tintColor = UIColor.grayColor; 
+0

Кто сказал, чтобы добавить его в подзаголовок? В раскадровке вы можете просто установить класс UINavigationBar. – Anand

+0

Я делаю все это программно, без раскадровки. – Adamski

-1

Я делал стиль с использованием подкласса. Пример:

#import <UIKit/UIKit.h> 

@interface CustomNavBar : UINavigationBar 

@end 


#import "CustomNavBar.h" 

@implementation CustomNavBar 

- (void) drawRect:(CGRect)rect 
{ 
    CGRect rect1 = CGRectMake(0, 0, 1, 1); 
    UIGraphicsBeginImageContext(rect1.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetFillColorWithColor(context, 
           [[UIColor whiteColor] CGColor]); 
    CGContextFillRect(context, rect1); 
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    UIImage *bgImage = img; 
    [bgImage drawInRect:rect]; 

    self.layer.masksToBounds = NO; 
    self.layer.shadowColor = [[UIColor blackColor] CGColor]; 
    self.layer.shadowOffset = CGSizeMake(0.0, 0.1); 
    self.layer.shadowOpacity = 0.25; 
    self.layer.masksToBounds = NO; 
    self.layer.shouldRasterize = YES; 

} 

@end 
Смежные вопросы