gpt4 book ai didi

iphone - UITableViewCell textLabel 宽度不变

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:56:50 25 4
gpt4 key购买 nike

我正在努力使我的 UITableViewCell 的文本标签中的文本从单元格的右侧环绕大约 30 个像素。然而,它从右边开始大约 5 或 10 个像素。我已经尝试编辑我在 cellForRowAtIndex 中设置的所有值,但是唯一改变的是单元格的高度,而不是单元格的 textLabel 有多大是,我找不到错误,希望这里有人能看到错误。

我一直在做进一步的测试,我发现如果我使用 sectionIndexTitlesForTableView,那么 UItableViewCell textLabel 将减小到下面代码中概述的正确大小。但是,如果我禁用此方法然后它不会注意到我试图在下面的代码中设置宽度。

这是我的代码如下。

//These Constants are used for dynamic cell height
#define FONT_SIZE 18.0f
#define CELL_CONTENT_WIDTH 290.0f
#define CELL_CONTENT_MARGIN 10.0f



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell using custom cell

if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

[cell.textLabel setLineBreakMode:UILineBreakModeWordWrap];
[cell.textLabel setMinimumFontSize:FONT_SIZE];
[cell.textLabel setNumberOfLines:0];
[cell.textLabel setFont:[UIFont boldSystemFontOfSize:FONT_SIZE]];
[cell.textLabel setTag:1];

[[cell contentView] addSubview:cell.textLabel];
}

//Customize cell here
cell.selectionStyle = UITableViewCellSelectionStyleNone; // no blue selection

//Replaces previously selected cells accessory view (tick)
if ([indexPath isEqual:oldCheckedIndexPath]){
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}else{
cell.accessoryType = UITableViewCellAccessoryNone;
}

//Display cells with data that has been sorted from startSortingTheArray
NSMutableArray *keys = [self.letterDictionary objectForKey:[self.sectionLetterArray objectAtIndex:indexPath.section]];

NSString *key = [keys objectAtIndex:indexPath.row];

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

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


//Applise current key value to cell text label
[cell.textLabel setFrame:CGRectMake(CELL_CONTENT_MARGIN, CELL_CONTENT_MARGIN, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), MAX(size.height, 25.0f))];

[cell.textLabel setText:key];

return cell;
}



//Cell size for word wrapping So the user can see all of the details of a submodel etc.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
//Display cells with data that has been sorted from startSortingTheArray
NSArray *keys = [self.letterDictionary objectForKey:[self.sectionLetterArray objectAtIndex:indexPath.section]];
NSString *key = [keys objectAtIndex:indexPath.row];

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

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

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

return height + (CELL_CONTENT_MARGIN * 2);
}

最佳答案

单元格的 layoutSubviews 方法将覆盖您在 cellForRow(或大多数其他地方)中尝试执行的任何操作。最好的解决方案是继承 UITableViewCell 并覆盖 layoutSubviews。确保调用 super,然后自定义文本标签框架。

编辑:

只需在您的实现和使用之上包含这个(当然要修改)

    CustomTableViewCell *cell = [tableView dequeReusableCell...

    cell = [[CustomTableViewCell alloc] initWithStyle...

相反。不需要额外的 .xibs。

    @interface CustomTableViewCell : UITableViewCell
@end

@implementation CustomTableViewCell
- (void)layoutSubviews
{
[super layoutSubviews];
cell.textLabel.frame = theFrameYouWant;
}
@end

关于iphone - UITableViewCell textLabel 宽度不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12101170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com