Центр UIButton программно - PullRequest
3 голосов
/ 18 января 2012

У меня есть UIButton, который я добавляю программно. Здесь нет проблем, он выглядит как надо и выглядит хорошо. Тем не менее, когда я наклоняю телефон в горизонтальное положение, кнопка выходит из положения, и я хочу, чтобы она все еще находилась в центре.

Портрет: It's centered here

Пейзаж: Not centered here

Я пробовал кучу вещей, но не могу заставить их работать, мне кажется, что авторазмер должен позаботиться об этом, однако ... в этом случае это не работает.

- (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 49)];

    _notMeButton = [UIButton buttonWithType:UIButtonTypeCustom];
    UIImage *butImage = [[UIImage imageNamed:@"notme.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:6];
    UIImage *butImagePressed = [[UIImage imageNamed:@"KC_notmePressed.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:6];
    [_notMeButton setBackgroundImage:butImage forState:UIControlStateNormal];
    [_notMeButton setBackgroundImage:butImagePressed forState:UIControlStateHighlighted];
    [_notMeButton setTitle:NSLocalizedString(@"Change address", @"KlarnaCheckout") forState:UIControlStateNormal];
    [_notMeButton setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal];
    [_notMeButton setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
    [_notMeButton setTitleShadowColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [_notMeButton.titleLabel setShadowColor:[UIColor whiteColor]];
    [_notMeButton.titleLabel setShadowOffset:CGSizeMake(0, 1)];
    [_notMeButton.titleLabel setFont:[UIFont systemFontOfSize:14]];
    [_notMeButton addTarget:self action:@selector(thisIsNotMe) forControlEvents:UIControlEventTouchUpInside];
    [_notMeButton setTag:1];
    [_notMeButton sizeToFit];
    [_notMeButton setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin];
    [_notMeButton setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];
    [_notMeButton setFrame:CGRectMake(10, 10, _notMeButton.frame.size.width+20, _notMeButton.frame.size.height)];
    [_notMeButton setCenter:footerView.center];

    [footerView addSubview:_notMeButton];

    return footerView;
}

Ответы [ 2 ]

6 голосов
/ 18 января 2012

Ваша идея об автоматическом изменении размера маски верна, но вы устанавливаете ее неправильно:

[_notMeButton setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin];
[_notMeButton setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];

Вторая строка перезаписывает то, что вы установили в первой.Правильный способ установить несколько флагов будет:

[_notMeButton setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin];
2 голосов
/ 18 января 2012

Прежде чем я отвечу на ваш вопрос:

[_notMeButton setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin];
[_notMeButton setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];

Второе предложение заменяет первое, вам следует использовать оператор |, поэтому применяются обе маски изменения размера:

[_notMeButton setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin];

Чтобы сохранить элемент там, где он находится, когда представление меняет свой размер, необходимо запретить ему использовать маску изменения размера:

[_notMeButton setAutoresizingMask:UIViewAutoresizingNone];

И эквивалент в Интерфейсном Разработчике такой:

IB autoresizing mask applier

Надеюсь, это поможет

...