Задать вопрос
deleted-mezhevikin
@deleted-mezhevikin

Как решить проблемы с получением размера UIView при отключении свойства translucent (ios7)?

Есть кастомный вью контроллер с таблицей. Внизу прижата вью (зеленая на скрине) при перевороте экрана вызывается метод resize и перерисовывает координаты. При translucent = YES все работает отлично, если же отключить прозрачность, то зеленая вью пропадает, как получать правильные координаты? Или только автолаоуты только хардкор?

thumb.png

@implementation CustomTableViewController


- (void)viewDidLoad
{
    [self.navigationController.navigationBar setTranslucent:NO];
    [super viewDidLoad];
    [self addTableView];
    [self loadData];
    [self addToolbar];
}

- (void)addTableView
{
    self.tableView = [[UITableView alloc] init];
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    self.tableView.backgroundColor = [UIColor whiteColor];
    self.tableView.frame = self.view.frame;
    self.tableView.autoresizingMask = self.view.autoresizingMask;
    [self.view addSubview:self.tableView];
}

- (void)loadData
{
    self.data = [NSMutableArray array];
    for (int i = 0; i<20; i++)
    {
        [self.data addObject:[NSString stringWithFormat:@"Row %d", i]];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
    
    cell.textLabel.text = [self.data objectAtIndex:indexPath.row];
    cell.textLabel.textColor = [UIColor redColor];
    
    return cell;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.data.count;
}

- (void)addToolbar
{
    self.toolBar = [[UIView alloc] init];
    self.toolBar.backgroundColor = [UIColor greenColor];
    [self.view addSubview:self.toolBar];
    [self resize];
}

- (void)resize
{
    float height = 50;
    self.toolBar.frame = CGRectMake(
        0,
        self.view.frame.size.height - height,
        self.view.frame.size.width,
        height
    );
    
    self.tableView.frame = CGRectMake(
        0,
        0,
        self.view.frame.size.width,
        self.view.frame.size.height-height
    );
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [self resize];
}


rghost.ru/53236356 - полный код этого примера
  • Вопрос задан
  • 3084 просмотра
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@KiriKiri
Как вариант сделать ваш toolbar футером последней секции таблицы, тогда никакие координаты вам не будут нужны.

self.tableView.tableFooterView = self.toolbar;

Если > iOS 6.1 говорят, что это можно решить если использовать autoLayout, но сам никогда не пробовал.
Ответ написан
morozovdenis
@morozovdenis
1. не используйте UITableViewController - используйте UIViewController. по своему опыту скажу что лучше пусть под таблицей лежит ещё вьюха

2. старый добрый autoresizing мне до сих пор хватает. что-то сложное лучше 3-мя строчками кода подписать

|----------------------------|
|                            |
|                            |
|                            |
|        tableView           |
|                            |
|                            |
|----------------------------|
|----------------------------|
|       ToolBarView.         |
|----------------------------|


у TableView пропишите autoresizingmask = (UIAutoresizingMaskFlixableHeight | UIAutoresizingMaskFlixableWidth) что соответствует проставлению всех красных маркеров в IB

у ToolBarView пропишите autoresizingmask = (UIAutoresizingMaskFlixableWidth | UIAutoresizingMaskFlixableTopMargin) что соответствует проставлению следующих маркеров в IB: левый, правый, нижний и горизонтальная стрелка в право-лево
Ответ написан
Ваш ответ на вопрос

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

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