2017-02-02 2 views
0

Я новичок в этом мире приложений iOS, и я разрабатываю приложение, которое должно отображать подробную информацию об элементе. Эта деталь может получить комментарии от пользователей и то, что мне нужно, что каждый раз, когда деталь получает новый комментарий высоту моего увеличения экрана, вот что я сделал, это экран:Как увеличить высоту, программно, UIScrollView с ограничениями?

I need to load the comments below the title

These are how my elements are

Сдерживающие факторы для прокрутки: Трейлинг, Ведущий, сверху и снизу к его надзору. Для просмотра содержимого: Трейлинг, Ведущий, верхний и нижний к его надзору. Выровняйте центр по x и y и сравните его по высоте и ширине с надстройкой.

Все комментарии приходят из службы, я хочу, чтобы контент увеличивался. Я показываю все комментарии, но UIScrollView не работает. Я думаю, что это из-за ограничения

Вот как я загружать и печатать комментарии и изменить contentzise моего Scrollview:

int y = bottomLine.frame.origin.y + 8; 
    int numComments = [[content objectForKey:@"comments"] intValue]; 

    if (numComments > 0) { 
     for (int j=0; j < [comments count]; j++) { 

       commentData = [comments objectAtIndex:j]; 

       //Create all the elements 
       viewComments = [[UIView alloc] initWithFrame:CGRectMake(8, y, self.view.bounds.size.width - 16, 109)]; 
       viewComments.backgroundColor = [UIColor grayColor]; 

       UIImageView *viewImgComment = [[UIImageView alloc] initWithFrame:CGRectMake(8, 8, 50, 50)]; 

       NSURL *linckImage = [NSURL URLWithString:[commentData objectForKey:@"image"]]; 
       [viewImgComment sd_setImageWithURL:linckImage placeholderImage:[UIImage imageNamed:@"place_holder_user"]]; 
       viewImgComment.layer.cornerRadius = 25; 
       viewImgComment.clipsToBounds = YES; 

       UILabel *lblTituloComment = [[UILabel alloc] initWithFrame:CGRectMake(50 + 16, 8, (viewComments.bounds.size.width - 74) , 17)]; 
       [lblTituloComment setText:[commentData objectForKey:@"name"]]; 
       [lblTituloComment setFont:[UIFont systemFontOfSize:14.0f]]; 

       UIView *viewRating = [[UIView alloc] initWithFrame:CGRectMake(50 + 16, 17 + 16, 121, 23)]; 
       viewRating.backgroundColor =[UIColor blackColor]; 
       viewRating.layer.cornerRadius = 11; 

       UILabel *lblDescripcionComment = [[UILabel alloc] initWithFrame:CGRectMake(8, 50 + 8, (viewComments.bounds.size.width - 16), 43)]; 

       [lblDescripcionComment setText:[commentData objectForKey:@"comment"]]; 
       [lblDescripcionComment setFont:[UIFont systemFontOfSize:14.0f]]; 
       [lblDescripcionComment setNumberOfLines:0]; 

       y = y + 117; 

       [viewComments addSubview:viewImgComment]; 
       [viewComments addSubview:lblTituloComment]; 
       [viewComments addSubview:viewRating]; 
       [viewComments addSubview:lblDescripcionComment]; 

       [masterScroll addSubview:viewComments]; 
      } 
     } 
     //Increase the content size 
     masterScroll.contentSize = CGSizeMake(self.view.bounds.size.width, y); 

Я надеюсь, что некоторые тела могут мне помочь, я пытался в течение 3-х дней, исследовать и спрашивать. Любой вопрос или какое-либо объяснение чего-то дайте мне знать.

+0

вы можете сказать мне, для комментариев вы используете табличное или UIView? если в таблице нет проблемы. если вы используете uiview, то у вас есть некоторые изменения. Не большая проблема. Просто скажи мне. – Pavankumar

+0

уверен, я использую uiview. – Joe0588

+0

1. Сохраните запись текущей высоты перед добавлением комментария. После добавления комментария вычислите высоту этого вида. Найдите разницу между предыдущей и текущей высотой. 2. Перейдите в панель рассказов -> выберите ограничение высоты прокрутки -> создайте выход для этого ограничения. -> Теперь перейдите в код -> heghtConstraint.constant = differenceHeight + currentHeightOfScrollView. – Pavankumar

ответ

0

Прежде всего, вы должны получить высоту своих ярлыков (с текстом содержания этикетки).

- (CGFloat)getLabelHeight:(UILabel*)label 
{ 
    //Here label is your Comment label. 
    CGSize constraint = CGSizeMake(label.frame.size.width, CGFLOAT_MAX); 
    CGSize size; 

    NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init]; 
    CGSize boundingBox = [label.text boundingRectWithSize:constraint 
                options:NSStringDrawingUsesLineFragmentOrigin 
               attributes:@{NSFontAttributeName:label.font} 
                context:context].size; 

    size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height)); 
    return size.height; 
} 

Получите ваш рост комментарий этикетки и установить размер содержания Scrollview:

CGSize *size; 
CGFloat height = [self getLabelHeight:lblDescripcionComment]; 
NSLog(@"totalHeight :%f",[self getLabelHeight:lblDescripcionComment]); 
lblDescripcionComment.frame = CGRectMake(18, 260, 220, height); 

#Here h is your scrollview height without comment label. 
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width,h+height)];