UIToolbar слева и справа отступы изначально отрицательные

Я борюсь со странным поведением UIToolbar в приложении iOS7+ для iPhone.

Вот как я его создал:

//toolbar
self.bottomToolbar=[[UIToolbar alloc] initWithFrame:CGRectMake(0.0, self.view.bounds.size.height-44.0, self.view.bounds.size.width, 44.0)];
self.bottomToolbar.autoresizingMask=(UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth);
[MKUIHelper toolbar:self.bottomToolbar setBarStyle:MKBarStyleWhite];
self.bottomToolbar.items=@[];
[self.view addSubview:self.bottomToolbar];

Когда мне нужно обновить его, я звоню (на самом деле обновляя только один из его элементов, но это не имеет значения):

-(void)updateToolbar
{
    UIBarButtonItem *doneBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"done" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonDidPress:)];
    doneBarButtonItem.tintColor=MK_Color_Green;
    UIBarButtonItem *clearBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"clear" style:UIBarButtonItemStylePlain target:self action:@selector(clearButtonDidPress:)];
    clearBarButtonItem.tintColor=MK_Color_Pink;
    UIBarButtonItem *spaceBetweenBackAndQuantity=[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    UIBarButtonItem *spaceBetweenQuantityAndClear=[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];        

    UIBarButtonItem *quantityItem=[self quantityBarButtonItem];
    self.bottomToolbar.items=[NSArray arrayWithObjects:doneBarButtonItem, spaceBetweenBackAndQuantity, quantityItem, spaceBetweenQuantityAndClear, clearBarButtonItem, nil];

    [self.rootViewController reloadToolbar];
}

Оба объекта UIBarButtonItem, созданные с использованием initWithTitle:.., каким-то образом имеют отрицательные левые и правые отступы. Это можно грубо исправить, добавив дополнительный фиксированный тип пробела UIBarButtonItems с обеих сторон массива элементов. Другими словами: компенсируйте странные начальные левые и правые отступы фиксированным пробелом типа UIBarButtonItems.

Помогите мне кто-нибудь, пожалуйста. Что вызывает такой странный эффект? Как я могу избавиться от этого странного заполнения?

Вот как это выглядит:

странное отрицательное заполнение начальной панели инструментов


person Oleg    schedule 21.01.2015    source источник
comment
Можете ли вы сделать скриншот, как выглядит эта проблема?   -  person MendyK    schedule 21.01.2015
comment
Отредактировал мой вопрос с изображением панели инструментов   -  person Oleg    schedule 21.01.2015
comment
Я не уверен, что autoresizingMask имеет какое-либо отношение к вашей проблеме, но попробуйте удалить эту строку и посмотреть, что произойдет. Кроме того, вы используете авторазметку?   -  person MendyK    schedule 21.01.2015
comment
отладка просмотра может помочь вам понять, что на самом деле происходит.   -  person A-Live    schedule 21.01.2015
comment
не используя авторазметку.   -  person Oleg    schedule 22.01.2015


Ответы (1)


Если вы установите ширину barButtons на правильную ширину, вы сможете обойти это.

- (UIBarButtonItem *)barButtonWithTitle:(NSString *)title action:(SEL)action {

    UIBarButtonItem *barButtonItem = [[[UIBarButtonItem alloc] initWithTitle:title style:UIBarButtonItemStylePlain target:self action:action] autorelease];


    UIButton *button = [UIButton buttonWithType: UIButtonTypeCustom];
    [button setTitle:title forState: UIControlStateNormal];
    [button sizeToFit];
    CGSize size = button.bounds.size;

    [barButtonItem setWidth:size.width];

    return barButtonItem;
}
person 7 F14T    schedule 27.01.2015