Как уменьшить / увеличить высоту просмотра по тексту - PullRequest
0 голосов
/ 04 февраля 2010

У меня есть UITableView, к которому я добавляю Header-View, разработанный в InterfaceBuilder. Этот заголовок имеет два UILabel с. Первый ярлык имеет заголовок, который присутствует всегда. Второй отображает описание, если оно есть. Обе строки могут быть довольно длинными.

Есть ли способ увеличить или уменьшить эти метки и вид так, чтобы текст отображался полностью или пробелы не отображались?

- (void)viewDidLoad {
    //..... 
    if (self.tableHeaderView == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"ArticleHeader" owner:self options:nil];
        self.tableView.tableHeaderView = self.tableHeaderView;
        [(UILabel* )[self.tableView.tableHeaderView viewWithTag:1] setText:self.article.name];
        [(UILabel* )[self.tableView.tableHeaderView viewWithTag:2] setText:self.article.description];
    }
    [self.navigationController setNavigationBarHidden:YES animated:YES];
    [super viewDidLoad];
}

мое решение (спасибо JK )

- (void)viewDidLoad {

    //....

    if (self.tableHeaderView == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"ArticleHeader" owner:self options:nil];
        UILabel *titleLabel = (UILabel* )[self.tableView.tableHeaderView viewWithTag:1]; 
        UILabel *descriptionLabel = (UILabel* )[self.tableView.tableHeaderView viewWithTag:2];

        titleLabel = (UILabel* )[self.tableHeaderView viewWithTag:1]; 
        descriptionLabel = (UILabel* )[self.tableHeaderView viewWithTag:2];

        CGSize sizeTitle = [self.article.name sizeWithFont:[titleLabel font]
                                        constrainedToSize:CGSizeMake(280.0, 700.0) 
                                            lineBreakMode:UILineBreakModeWordWrap];
        CGSize sizeDescription = [self.article.description sizeWithFont:[descriptionLabel font]
                                                          constrainedToSize:CGSizeMake(280.0, 700.0) 
                                                              lineBreakMode:UILineBreakModeWordWrap];

        float addHeight = 17.0;
        [self.tableHeaderView setFrame:CGRectMake(0, 0, 280, sizeTitle.height+addHeight + sizeDescription.height+addHeight)];
        [titleLabel setText:self.article.name];
        [descriptionLabel setText:self.article.description];

        [titleLabel setLineBreakMode:UILineBreakModeWordWrap];
        [titleLabel setFrame:CGRectMake(10,10, 260, sizeTitle.height)];

        [descriptionLabel setLineBreakMode:UILineBreakModeWordWrap];
        if (sizeDescription.height > 0) {
            [descriptionLabel setFrame:CGRectMake(20,
                                             titleLabel.frame.size.height+titleLabel.frame.origin.y, 
                                             260, 
                                             sizeDescription.height+addHeight)];
        } else {
            [descriptionLabel setHidden:YES];
        }

        self.tableView.tableHeaderView = self.tableHeaderView;
    }
    //.....
    [super viewDidLoad];
}

но мне любопытно, почему мне нужно установить addHeight? В противном случае более длинный текст будет обрезан.

Ответы [ 2 ]

1 голос
/ 05 февраля 2010

[myTextView sizeToFit];

1 голос
/ 05 февраля 2010

Вы можете использовать один из методов в Справочнике дополнений USSit NSString, чтобы определить размер меток для заданного объема текста с заданным шрифтом и режимом разрыва строки. Затем вы можете определить необходимую высоту ячейки и отрегулировать высоту ячейки, реализовав метод делегата UITableView tableView: heightForRowAtIndexPath:

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