UILabel 动态高度不起作用

发布于 2024-11-15 03:04:37 字数 2539 浏览 2 评论 0原文

我无法使我的 UILabel 高度动态化。该标签包含在自定义 TableViewCell 中,

我已设法使 TableViewCellHeight 动态化,但我无法使标签多行。

每当我设置行数= 0(在IB和代码中)时,标签/文本就会完全消失。 lineBreakMode 也没什么作用?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath  
{


    Book *eventUp = [appDelegate.eventDataUp objectAtIndex:indexPath.row];

    NSString *text = eventUp.date;

    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);

    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

    CGFloat height = MAX(size.height, 44.0f);

    return height + (CELL_CONTENT_MARGIN * 2);

    //return 66;    

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [appDelegate.eventDataUp count];
}



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"EventUpCVCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {

        self.eventUpCVCell = nil;
        [[NSBundle mainBundle] loadNibNamed:@"EventUpCVCell" owner:self options:nil];
        cell = self.eventUpCVCell;

        label = [[UILabel alloc] initWithFrame:CGRectZero];
        [label setLineBreakMode:UILineBreakModeWordWrap];
        [label setMinimumFontSize:FONT_SIZE];
        [label setNumberOfLines:0];
        [label setFont:[UIFont systemFontOfSize:FONT_SIZE]];
        [label setTag:1];

        [[cell contentView] addSubview:label];
         }
    Book *eventUp = [appDelegate.eventDataUp objectAtIndex:indexPath.row];

    UILabel *lblMonth = (UILabel *) [cell viewWithTag:kLabel1Tag];
    UILabel *lblTitle = (UILabel *) [cell viewWithTag:kLabel2Tag];
    UILabel *lblDate = (UILabel *) [cell viewWithTag:kLabel3Tag];

    //month.text = eventUp.month;
    lblTitle.text = eventUp.title;
    lblDate.text = eventUp.date;

    //lblDate.lineBreakMode = UILineBreakModeWordWrap;
    lblDate.numberOfLines = 1;

    lblMonth.text = [NSString stringWithFormat:@"%@ ", eventUp.month];



    //cell.textLabel.text = eventUp.title;

    //cell.detailTextLabel.text = eventUp.date;

    //NSLog(@"Hello");
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    // Set up the cell
    return cell;
}

im having troubles making my UILabel height dynamic. The label is contained in a custom TableViewCell

I have managed to make the TableViewCellHeight dynamic, but i cant make the label multiple lines.

Whenever i set number of lines = 0 (in IB as well as code), the label/text disappears completely. And lineBreakMode doesnt do much either?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath  
{


    Book *eventUp = [appDelegate.eventDataUp objectAtIndex:indexPath.row];

    NSString *text = eventUp.date;

    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);

    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

    CGFloat height = MAX(size.height, 44.0f);

    return height + (CELL_CONTENT_MARGIN * 2);

    //return 66;    

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [appDelegate.eventDataUp count];
}



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"EventUpCVCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {

        self.eventUpCVCell = nil;
        [[NSBundle mainBundle] loadNibNamed:@"EventUpCVCell" owner:self options:nil];
        cell = self.eventUpCVCell;

        label = [[UILabel alloc] initWithFrame:CGRectZero];
        [label setLineBreakMode:UILineBreakModeWordWrap];
        [label setMinimumFontSize:FONT_SIZE];
        [label setNumberOfLines:0];
        [label setFont:[UIFont systemFontOfSize:FONT_SIZE]];
        [label setTag:1];

        [[cell contentView] addSubview:label];
         }
    Book *eventUp = [appDelegate.eventDataUp objectAtIndex:indexPath.row];

    UILabel *lblMonth = (UILabel *) [cell viewWithTag:kLabel1Tag];
    UILabel *lblTitle = (UILabel *) [cell viewWithTag:kLabel2Tag];
    UILabel *lblDate = (UILabel *) [cell viewWithTag:kLabel3Tag];

    //month.text = eventUp.month;
    lblTitle.text = eventUp.title;
    lblDate.text = eventUp.date;

    //lblDate.lineBreakMode = UILineBreakModeWordWrap;
    lblDate.numberOfLines = 1;

    lblMonth.text = [NSString stringWithFormat:@"%@ ", eventUp.month];



    //cell.textLabel.text = eventUp.title;

    //cell.detailTextLabel.text = eventUp.date;

    //NSLog(@"Hello");
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    // Set up the cell
    return cell;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

唐婉 2024-11-22 03:04:37

您必须在创建标签框架后设置标签框架,实际上您使用 CGRectZero Frame

尝试创建它:

       label = [[UILabel alloc] initWithFrame:CGRectZero];
        [label setLineBreakMode:UILineBreakModeWordWrap];
        [label setMinimumFontSize:FONT_SIZE];
        [label setNumberOfLines:0];
        [label setFont:[UIFont systemFontOfSize:FONT_SIZE]];
        [label setTag:1];

        Book *eventUp = [appDelegate.eventDataUp objectAtIndex:indexPath.row];

        NSString *text = eventUp.date;

        CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);

        CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

        [label setFrame:CGRectMake(0,0,size.width,size.height)];

You have to set the label frame after creating it, actually you create it with CGRectZero Frame

try:

       label = [[UILabel alloc] initWithFrame:CGRectZero];
        [label setLineBreakMode:UILineBreakModeWordWrap];
        [label setMinimumFontSize:FONT_SIZE];
        [label setNumberOfLines:0];
        [label setFont:[UIFont systemFontOfSize:FONT_SIZE]];
        [label setTag:1];

        Book *eventUp = [appDelegate.eventDataUp objectAtIndex:indexPath.row];

        NSString *text = eventUp.date;

        CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);

        CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

        [label setFrame:CGRectMake(0,0,size.width,size.height)];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文