Создание фото-фида в стиле Instagram - PullRequest
3 голосов
/ 17 января 2012

Я пытаюсь создать фотоканал для приложения, которое я создаю, аналогично Instagram:

Instagram фото

Я создал предварительную версию с использованием UITableView для канала, но это становится проблемой, связанной с динамической природой каждой ячейки. Количество лайков и комментариев вместе с текстом комментария будет определять, насколько высока ячейка. Я использовал UITextViews, чтобы нарисовать комментарий и подобный текст, и приблизил высоту ячейки и расположение, используя текст UITextViews с sizeWithFont. Это решение кажется очень неточным и имеет много недостатков.

Я думал об использовании UIWebView для всего фида в качестве альтернативного решения. Это сделало бы очень простым позиционирование текста с комментариями и комментариями, наряду с возможностью иметь переменный шрифт в тексте, как это видно в Instagram. Я не очень широко использовал UIWebViews, поэтому не уверен, насколько легко или сложно было бы создать весь канал таким образом.

Должен ли я продолжать использовать свое решение UITableView или посмотреть, как все переделывать, используя UIWebView?

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

В моем приложении есть UITableViewCell, который динамически регулирует свою высоту в зависимости от количества текста в ячейке. Я думаю, что это может помочь ответить на ваш вопрос.

Вот хитрость: нет необходимости «приближать размеры текста» --- ознакомьтесь с документацией для метода [NSString sizeWithFont: constrainedToSize: lineBreakMode:]

maximumSize = CGSizeMake(self.contentView.bounds.size.width - TEXT_LEFT_MARGIN * 2.0, 
                                 MAXIMUM_TEXT_HEIGHT);
        textStringSize = [textLabel.text sizeWithFont:textLabel.font 
                                    constrainedToSize:maximumSize 
                                        lineBreakMode:textLabel.lineBreakMode]; 

Итак, давайте возьмем простой пример, где вы хотите, чтобы 10 пикселей пробела над меткой и 15 пикселей пробела под меткой. Затем вы сгенерируете CGRect с измерениями выше, с высотой 25 пикселей, добавленных к значению textStringSize.height, сгенерированному выше.

Использование этого метода означает, что ваши UITableViewCells будут хорошо масштабироваться вверх и вниз, независимо от размера комментариев в разных ярлыках.

0 голосов
/ 30 апреля 2014

попробуйте это ..

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleIdendifer=@"item";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:simpleIdendifer];
    if(cell==nil)
    {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:simpleIdendifer];

    }


    [[cell textLabel] setText:self.str];
    [[cell textLabel] setNumberOfLines:0];
    [[cell textLabel] setLineBreakMode:NSLineBreakByWordWrapping];
    [[cell textLabel] setFont:[UIFont preferredFontForTextStyle:UIFontTextStyleBody]];
        return cell;
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //add your table view cell content here
    NSString *string = self.str;

    NSDictionary *attributes = @{NSFontAttributeName: [UIFont preferredFontForTextStyle:UIFontTextStyleBody]};

    CGRect frame = [string boundingRectWithSize:CGSizeMake(CGRectGetWidth(tableView.bounds), CGFLOAT_MAX) options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading) attributes:attributes context:nil];
    return ceilf(CGRectGetHeight(frame)+TableViewCellPadding);
}
...