@SVM12

Как программно изменить ширину UITableView?

Здраствуйте.

Вообщем есть UIViewController, в который я разместил UITableView во весь экран(main UIView). iPad. Использую сториборд.
Есть задача: при выделении записи в UITableView размер и позиция UItableView должны меняться(ширина уменьшаться, а сама вьюшка сдвигаться в право). А слева должна отобразиться вьюшка(или без нее) с деталями выделенной записи.

a54aede09f7e46d3b6da34e9372edece.jpg

Я попытался сделать это следующим способом:

Код контроллера:
- (void)viewDidLoad {
    [super viewDidLoad];
    bigFrame = self.tableView.frame;
    CGFloat xOffset = 256;
    smallFrame = CGRectMake(bigFrame.origin.x + xOffset, bigFrame.origin.y, bigFrame.size.width - xOffset, bigFrame.size.height);
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    tableView.frame = smallFrame;
}


Проблема в том, что в таком случае работает только со второй попытки выделения.

Прошу разъяснить как правильно делать подобное поведение в интерфейсе. SplitViewController не используется.
  • Вопрос задан
  • 2435 просмотров
Решения вопроса 1
@ifau
Можно вынести у tableView Leading Space to Superview в Outlet, и изменять его
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.leftSpace.constant = 256;
    [UIView animateWithDuration:animationDuration animations:^
    {
        [self.view layoutIfNeeded];
    }];
}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.leftSpace.constant = 0;
    [UIView animateWithDuration:animationDuration animations:^
    {
        [self.view layoutIfNeeded];
    }];
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@SVM12 Автор вопроса
ifau, Спасибо. Помогло.

Также я выяснил, что если tableView создать программно через initWithFrame, то выше описанной проблемы не возникает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы