2014-12-07 6 views
0

Хорошо, поэтому я пытался исправить проблему, которую я получил уже пару дней без успеха. Сегодня я нашел решение, но не ПОЛНОЕ решение моей проблемы.Изменение позиции UILabel для пользовательского UITableVIewCell

Так что это проблема.

Он начинается, как это, пожалуйста, обратите внимание на выравнивание временных меток (те, слева)

Screenshot 1

Но после того, как таблицы перезагрузок во второй раз или при переключении вкладок назад и вперед он ТОГДА меняет то, что я хочу, чтобы оно выглядело с самого начала. Как это.

Screenshot 2

Это код, который делает это внутри cellForRowAtIndexPath:

if ([gameInfoObject.GameTime isEqual: @"FT"] || ([gameInfoObject.GameTime rangeOfString:@":"].location != NSNotFound)) { // CHeck to see if its FT or string contains ":" then hide liveB 

     cell.liveButton.hidden = YES; 
     CGRect frame = cell.gameTimeLabel.frame; 
     frame.origin.x= 27;       // move the label 10pts to the left since no image will be present 
     cell.gameTimeLabel.frame= frame; 

Я нашел решение с этого поста Changing the position of custom UIButton in custom UITableViewCell, но проблема в том, что она меняется для всех ячеек. Как вы можете видеть, мне нужно изменить только несколько ячеек. Пожалуйста, помогите мне, что я могу сделать им из идей ...

EDIT 1 весь кодcellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *identifier = @"Cell"; 
    GamesInfoTableViewCell *cell = (GamesInfoTableViewCell *)[tableView dequeueReusableCellWithIdentifier:identifier]; 

    // Configure the cell... 

    GameInfo *gameInfoObject; 

    gameInfoObject =[gamesInfoArray objectAtIndex:indexPath.row]; 

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

    cell.backgroundColor = TABLECOLOR; 

    cell.homeTeamLabel.textColor = TEXT; 
    cell.awayTeamLabel.textColor = TEXT; 
    cell.gameTimeLabel.textColor = TEXT; 


    cell.homeTeamLabel.text = gameInfoObject.HomeTeam; 
    cell.awayTeamLabel.text = gameInfoObject.AwayTeam; 
    cell.homeTeamScoreLabel.text = gameInfoObject.HomeScore; 
    cell.awayTeamScoreLabel.text = gameInfoObject.AwayScore; 
    cell.liveButton.image = [UIImage imageNamed:@"1675447.png"]; //Load the green image 

    if ([gameInfoObject.GameTime isEqual: @"FT"] || ([gameInfoObject.GameTime rangeOfString:@":"].location != NSNotFound)) { // CHeck to see if its FT or string contains ":" then hide liveB 

     cell.liveButton.hidden = YES; 

     CGRect frame = cell.gameTimeLabel.frame; 
     frame.origin.x= 27;       // move the label 10pts to the left since no image will be present 
     cell.gameTimeLabel.frame= frame; 


    } 

    else 
     cell.liveButton.hidden = NO; 

    if (([gameInfoObject.GameTime rangeOfString:@":"].location != NSNotFound)) { 
     cell.accessoryType = FALSE; 
     cell.userInteractionEnabled = NO; 
     cell.homeTeamScoreLabel.hidden = YES; 
     cell.awayTeamScoreLabel.hidden = YES; 
    } 

    cell.gameTimeLabel.text = gameInfoObject.GameTime; 

    return cell; 
} 
+0

Попробуйте положить его в - (пустоте) Tableview: (UITableView *) Tableview willDisplayCell: (UITableViewCell *) клетка forRowAtIndexPath: (NSIndexPath *) indexPath { – soulshined

+0

Я уже пробовал, Dst помощь @soulshined –

+0

Вы используете автоматическая компоновка в банке или раскадровке, которая описывает расположение вашей ячейки? Если так настроить кадр gameTimeLabel, вероятно, ваша проблема - вам нужно будет отрегулировать ограничение (по сравнению с фреймом), которое контролирует его положение. Я также думаю, что вы должны сделать свой макет в самом GameInfoTableViewCell, в layoutSubviews (если не использовать автомасштабирование!) – TomSwift

ответ

0

Просто проверьте indexpath.row

if (indexpath.row == 2){ 
    cell.liveButton.hidden = YES; 
    CGRect frame = cell.gameTimeLabel.frame; 
    frame.origin.x= 27;       // move the label 10pts to the left since no image will be present 
    cell.gameTimeLabel.frame= frame;} 

EDIT - -

Его все еще не на 100% понят, в чем проблема, но вот несколько вещей, которые вы могли бы попробовать.

  1. Сброс макета в layoutSubviews [self.view setNeedsLayout];
  2. Обновить данные экземпляра UITableView после просмотра нагрузок на начальном этапе.
+0

Вы неправильно поняли мой вопрос. Код, который я предоставил с результатами в изображениях, которые я предоставил. Что правильно, это изменяется для ячеек, которые мне нужны, но главная проблема заключается в том, что она не меняет ее в первый раз, а во второй раз. Решение из сообщения, которое я связал, решает проблему, когда оно меняет его в первый раз, но оно изменяется для ВСЕХ ячеек @NewEngland –

+0

Итак, только после перезагрузки tableView или перехода к нему из другого VC вы получаете желаемый результат ? В этом случае отправьте еще один код. Также, как вы настраиваете весь вид таблицы – MendyK

+0

Исправить. Я не думаю, что это связано с тем, как я создал таблицу, но плохо опубликовал текст. " Похоже, что размер контейнера изменяется после того, как cellForRowAtIndexPath возвращается, и что где-то там найдена новая позиция для нашего ярлыка, это объясняет, почему повторное использование ячейки позже устраняет проблему". GOt this quote from http://stackoverflow.com/questions/8373214/uilabel-position-in-a-uitableviewcell-fails-on-the-first-try –

Смежные вопросы