iPhone: получить ширину UILabel в cellForRowAtIndexPath - PullRequest
1 голос
/ 02 апреля 2012

У меня есть UITableView с пользовательской строкой. В моем пользовательском ряду у меня есть UILAbel с авторазмером по маске ширины, поэтому в портретной ориентации он имеет одну ширину, а в альбомной - другую.

В моем cellForRowAtIndexPath я должен получить ширину метки:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
        (NSIndexPath *)indexPath {
    UILabel *myLabel = 
    (UILabel *)[cell viewWithTag:2];
    float width = myLabel.frame.size.width;
}

И когда я запускаю приложение, все в порядке и ширина хорошая. Но когда я поворачиваю устройство в альбомную ориентацию, cellForRowAtIndexPath вызывается до того, как UILAbel меняет свой кадр, и я получаю ту же ширину, что и в портретной ориентации. Так как быть? Как получить правильную ширину при повороте устройства? Одна мысль, которая приходит мне в голову, это перезагрузить tableView в didRotateForInterfaceOrientation ... Есть ли другие решения? Спасибо ...

UPDATE:

Еще одна вещь, когда я запускаю приложение в альбомном режиме, ширина все равно, как в портретном. Зачем ? Как это исправить?

1 Ответ

3 голосов
/ 02 апреля 2012

Замените этот код своим. Пусть это поможет:

    static NSString *iden = @"Setting";
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:iden];

            if (cell == nil)
            {

                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:iden];
                UILabel *label = [[UILabel alloc] init];
                float xpos = cell.contentView.frame.origin.x ;
                float ypos = cell.contentView.frame.origin.y;       
                float nwidth = cell.contentView.frame.size.width ;
                float nheight = cell.contentView.frame.size.height;
                label.frame = CGRectMake(xpos, ypos, nwidth, nheight);

                label.tag = indexPath.row + 7777;

                [cell.contentView addSubview:label];
    [label release]
        }
      UILabel *labeltagged =(UILabel*) [cell.contentView viewWithTag:indexPath.row+7777];
    float xpos = cell.contentView.frame.origin.x ;
                float ypos = cell.contentView.frame.origin.y;       
                float nwidth = cell.contentView.frame.size.width ;
                float nheight = cell.contentView.frame.size.height;
                labeltagged.frame = CGRectMake(xpos, ypos, nwidth, nheight);

return cell;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...