代码之家  ›  专栏  ›  技术社区  ›  vikingosegundo

如何根据文本缩小/扩展视图高度

  •  0
  • vikingosegundo  · 技术社区  · 15 年前

    我有一个 UITableView ,我在其中添加了一个在InterfaceBuilder中设计的头视图。此标题视图有两个 UILabel S.第一个标签有一个标题,即始终存在的标题。第二个显示描述(如果存在)。两个字符串都可以很长。

    是否有一种方法来扩展或缩小此标签和视图,以便完全显示文本,或者不显示空白?

    - (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 回复  |  直到 9 年前
        1
  •  1
  •   RunLoop    15 年前

    可以使用nsstring uikit additions引用中的一种方法来确定具有给定字体和换行模式的给定文本量的标签大小。然后,您可以通过实现UITableView委托方法TableView:HeightForRowatindexPath来确定单元的必要高度并调整单元高度:

        2
  •  1
  •   Dave DeLong    15 年前

    [myTextView sizeToFit];