2015-05-21 2 views
1

Я пытаюсь создать стандартную панель навигации программно с помощью UINavigationItem setLeftBarButtonItem и setRightBarButtonItemДобавление влево и вправо UIBarButtonItem в панели навигации

Я хочу иметь NavigationItem, который выглядит как

[ < BACKTEXT  FWDTEXT > ] 

Я хочу иметь постоянное пространство между моими изображениями (стрелкой) и краями устройства. Я хотел бы также иметь постоянное пространство между изображениями и текстами.

Я создал категорию над UIBarButtonItem и добавил два метода backButtonWith и fwdButtonWith

Я прочитал @Split useful answer, что объясняется, как решить правой кнопкой

button.titleEdgeInsets = UIEdgeInsetsMake(0, - button.imageView.frame.size.width, 0, button.imageView.frame.size.width); 
button.imageEdgeInsets = UIEdgeInsetsMake(0, button.titleLabel.frame.size.width, 0, -button.titleLabel.frame.size.width); 

Но я m с трудным временем разрешения кнопки «Назад».

Вот мой код

- (UIBarButtonItem *)buttonWith:(BOOL) directionLeft title:(NSString *)title image:(UIImage *) buttonImage tintColor:(UIColor *)color target:(id)target andAction:(SEL)action{ 
    UIButton *barButton; 
    barButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    float buttonWidth = 130.0f; 
    [barButton setFrame:CGRectMake(0, 0, buttonWidth, 20.5f)]; 
    [barButton setTitle:title forState:UIControlStateNormal]; 
    [barButton setTitleColor:color forState:UIControlStateNormal]; 
    const CGFloat* components = CGColorGetComponents(color.CGColor); 
    [barButton setTitleColor:[UIColor colorWithRed:components[0] green:components[1] blue:components[2] alpha:0.3f] forState:UIControlStateHighlighted]; 

    UIEdgeInsets titleEdgeInsets; 
    UIEdgeInsets imageEdgeInsets; 
    UIImage *image = [self image:buttonImage tintedWithColor:color fraction:0.0]; 
    [barButton setImage:image forState:UIControlStateNormal]; 
    [barButton setImage:[self image:image byApplyingAlpha:0.3] forState:UIControlStateHighlighted]; 

    [barButton addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; 
    if(directionLeft == YES){ 
    titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);//THIS PARAMS SHOULD BE CONFIGURED 
    imageEdgeInsets = UIEdgeInsetsMake(0,0,0,0); 
    }else{ 
     titleEdgeInsets = UIEdgeInsetsMake(0, -barButton.imageView.frame.size.width, 0, barButton.imageView.frame.size.width); 
     imageEdgeInsets = UIEdgeInsetsMake(0, barButton.titleLabel.frame.size.width, 0, -barButton.titleLabel.frame.size.width); 
    } 
    barButton.imageEdgeInsets = imageEdgeInsets; 
    barButton.titleEdgeInsets = titleEdgeInsets; 

    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:barButton]; 
    return barButtonItem; 
} 

ответ

0

Кнопка возврата, который вы установили в UINavigationItem появляется на следующий элемент навигации, которая проталкивается к панели навигации. Вы не увидите в текущем навигационном элементе. Кроме того, как я помню, кнопка возврата не может содержать пользовательский вид, это должен быть простой UIBarButtonItem.

Вы можете настроить внешний вид задней кнопки с

[UIBarButtonItem appearanceWhenContainedIn:<YourNavigationBar.class>] 

или с общим внешним видом

[UIBarButtonItem appearance] 

Для деталей на задней кнопки элемента внешнего вида настройки, пожалуйста, проверьте этот question

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