Динамическая высота UITableView не меняет iOS - PullRequest
1 голос
/ 08 июля 2019

Перетаскивание UITableViewHeader

enter image description here

Вы можете посмотреть на оранжевый цвет UITextView.

enter image description here

Я установил постоянную высоты просмотра таблицы равной нулю.

После перезагрузки общая высота представления таблицы UITableView, показывающая то же, что и предыдущая (без отображения UITextView)

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.heightConstCommentBox.constant = 0;

    [self configureTableviewFooter];

}

-(void)configureTableviewFooter{
    //More button Configure

    height =  50 +[self recusiveDescription:self.viewFooter] ;

    // Assign new frame
    self.viewFooter.frame =  CGRectMake(self.viewFooter.frame.origin.x, 
    self.viewFooter.frame.origin.y,self.viewFooter.frame.size.width ,  height); // viewFooter is container view of tableFooterView

    self.tableView.tableFooterView = self.viewFooter;
    [self.tableView reloadData];

}

- (float )recusiveDescription:(UIView *)view
{
    NSString *s = @"";
    float height = 0;

    NSArray *subviews = [view subviews];
    if ([subviews count] == 0) return 0;

    for (UIView *subView in subviews) {

    height = height + subView.frame.size.height ;

        [self recusiveDescription:subView];
    }
    return height;
}

После перезагрузки представления таблицы размер нижнего колонтитула представления таблицы не изменяется.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

вы можете использовать следующее в случае, если вы использовали пользовательскую ячейку для таблицы.

в следующем коде замените postss [index.row] .post на ваше содержимое ярлыка , а +230 - это минимальная высота вашей ячейки. или вы можете сказать, что его высота отличается от метки.

метод автоматического измерения будет работать, только если у вас есть 1 метка или 1 текстовое поле, 1 текстовое представление.

и не фиксируйте высоту вашего ярлыка.

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let heightOfRow = self.calculateHeight(inString: postss[indexPath.row].post)
    return (heightOfRow + 230)
}

//custom function for calculate dynamic height
func calculateHeight(inString:String) -> CGFloat
{
    let messageString = inString
    let attributes : [NSAttributedString.Key : Any] = [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 15.0)]

    let attributedString : NSAttributedString = NSAttributedString(string: messageString, attributes: attributes)

    let rect : CGRect = attributedString.boundingRect(with: CGSize(width: 370, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil)

    let requredSize:CGRect = rect
    return requredSize.height
}
0 голосов
/ 08 июля 2019

В методе recusiveDescription:(UIView *)view вы используете свойство frame подпредставления.Но для автопрокладки это не правильно.Чтобы получить будущий размер представления , вызовите:

- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize 
        withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority 
              verticalFittingPriority:(UILayoutPriority)verticalFittingPriority;

Этот метод возвращает оптимальный размер для представления на основе предоставленных приоритетов ограничения.

Также я сделалне понимаю, почему вы вызываете recusiveDescription в recusiveDescription: и не используете значение результата.

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