2013-07-31 3 views
0

Надеется, что эти скриншоты помогут объяснить мой вопрос - это как мой uitablecell выглядит как при первой загрузке (обратите внимание на название метку в ячейке):UILabel динамическая высота в UITableViewCell действует беспорядочную

enter image description here

Если я прокручиваю ниже и вернуться, она становится правым (больше не ellipsisized, так, как это должно было быть при первой загрузке):

enter image description here

Я расчетливый динамический labelsize и applyi Это ограничение. Вот соответствующий код (следующий записывается в рубине в рамках проекта rubymotion IOS):

def tableView(tableView, cellForRowAtIndexPath: indexPath) 
    object = @posts[indexPath.row] 
    cellIdentifier = "DayCell" 
    cell = @day_table_view.dequeueReusableCellWithIdentifier(cellIdentifier) 
    unless cell 
     cell = PostCellView.alloc.initWithStyle(UITableViewCellStyleDefault, reuseIdentifier: cellIdentifier) 
     cell.contentView.apply_constraints 
    end 
    cell 
    end 

    def tableView(tableView,willDisplayCell: cell, forRowAtIndexPath:indexPath) 
    object = @posts[indexPath.row] 
    cell.fill(object) 
    end 

post_cell_view.rb метод # заливка

def fill(post) 
    self.post = post 
    @title_label.text = post.title 

    @reason_image_view.setImageWithURL(NSURL.URLWithString(post.reason.icon), 
        placeholderImage: nil, 
        completed: lambda{|image,error,cacheType| 
         # if cacheType == 0 
         @reason_image_view.alpha = 0 
         UIView.animateWithDuration(0.25, 
          animations: lambda{ 
           @reason_image_view.alpha = 1 
          }) 
         # end 
        }) 

    expectedTitleLabelSize = @title_label.text.sizeWithFont(@title_label.font, constrainedToSize:[App.window.frame.size.width - 50, Float::MAX], lineBreakMode: NSLineBreakByWordWrapping) 
    @title_label.addConstraint Teacup::Constraint.new(@title_label, :height).equals(expectedTitleLabelSize.height).nslayoutconstraint 

    @post_picture_image_view.setImageWithURL(NSURL.URLWithString(post.image.file_medium), 
        placeholderImage: nil, 
        completed: lambda{|image,error,cacheType| 
         # if cacheType == 0 
         @post_picture_image_view.alpha = 0 
         UIView.animateWithDuration(0.25, 
          animations: lambda{ 
           @post_picture_image_view.alpha = 1 
          }) 
         # end 
        }) 
    @post_picture_image_view.contentMode = UIViewContentModeScaleAspectFill 

    if post.cost.blank? 
     @price_flag_image.alpha = 0 
    else 
     @price_flag_image.alpha = 1 
     @price_label.text = post.cost 
    end 

    @location_label.text = post.location.name 
    @distance_label.text = post.location.distance.to_s 

    end 

Я предполагаю, что этот вопрос, я не являюсь применяя ограничения в нужное время? Пожалуйста, просветите меня гуру stackoverflow!

+0

Мне что-то не хватает. Оба изображения выглядят одинаково для меня. – rdelmar

+0

На первом изображении метка заголовка является эллипсизированной - высота uilabel не устанавливается правильно. На втором изображении вы можете увидеть, что он правильно установлен – bpn

+0

Вы пытались заполнить ячейку в 'tableView (tableView, cellForRowAtIndexPath: indexPath)', а не 'willDisplayCell'? – alxmitch

ответ

0

Я смог исправить это, удалив все ограничения на @title_label (раньше я использовал автозапуск для размещения метки) и преобразовал его в фиксированные координаты. So in fill()

expectedTitleLabelSize = @title_label.text.sizeWithFont(@title_label.font, constrainedToSize:[App.window.frame.size.width - 50, Float::MAX], lineBreakMode: NSLineBreakByWordWrapping) 
@title_label.frame = [[35,60],[270, expectedTitleLabelSize.height]] 

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

2

Вот как я обработка переменной высоты метки:

  • установить lineBreakMode в NSLineBreakByWordWrapping
  • набора numberOfLines до 0
  • установить предпочтительную максимальную ширину макета через setPreferredMaxLayoutWidth:
  • установки ограничений Автокомпоновки как обычно будет

Вот упрощенная сущность, которая демонстрирует установку в UITableView и UITableViewCell подкласса:

https://gist.github.com/dblandin/6303425

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

https://dl.dropboxusercontent.com/u/1096930/dynamic-label.zip

Я также пошел еще один шаг и показал вам, как настроить UITableViewCells с переменной высотой.

С вашего скриншота, похоже, что все ячейки установлены на фиксированную высоту.

Надеюсь, это поможет! Дайте мне знать, если у вас возникнут дополнительные вопросы.

+0

О, это здорово, спасибо за подробный ответ - я собираюсь проверить это – bpn

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