У меня есть некоторый UITableViewCell с TextView, который является динамическим, и некоторые другие объекты, которые должны быть вертикально центрированы.
В данный момент я вычисляю высоту UITextView и использую его как ссылку, чтобы установить все на месте.
Проблема, с которой я столкнулся, заключается в том, что иногда он неверно рассчитывает, а «priceLabel», который всегда должен быть посередине, оказывается внизу?Происходит примерно в 20% случаев, когда я прокручиваю, так что ячейка снова становится видимой.
Есть ли способ получить higeht этой ячейки?И почему он рассчитывает неправильно?Это также сокращает UITextView пополам, когда эта проблема появляется?
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
CGSize size;
NSString *text;
/* Height of each cell */
text = @"Some different lengths of text";
size = [text sizeWithFont:[UIFont fontWithName:@"TrebuchetMS" size:17] constrainedToSize:CGSizeMake(theTableView.bounds.size.width - 260, 800) lineBreakMode:UILineBreakModeWordWrap];
float totalSize = size.height + 10;
if (totalSize < 120) {
return 120;
} else {
return totalSize;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
CGSize size;
NSString *text;
float totalSize;
/* Height of each cell */
text = @"Some different lengths of text";
size = [text sizeWithFont:[UIFont fontWithName:@"TrebuchetMS" size:17] constrainedToSize:CGSizeMake(theTableView.bounds.size.width - 260, 800) lineBreakMode:UILineBreakModeWordWrap];
if (size.height + 10 < 120) {
totalSize = 120;
} else {
totalSize = size.height + 10;
}
}
/* Createing a new Cell */
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
/* Create the text Label */
textView = [[[UITextView alloc] initWithFrame: CGRectMake(90,35,theTableView.bounds.size.width - 260 , totalSize)] autorelease];
[cell.contentView addSubview:textView];
textView.tag = TEXT_LABEL_TAG;
textView.backgroundColor = [UIColor clearColor];
textView.textColor = [UIColor blackColor];
textView.font = [UIFont fontWithName:@"TrebuchetMS" size:17];
textView.editable = NO;
textView.userInteractionEnabled = NO;
/* Create price Label */
priceLabel = [[[UILabel alloc] initWithFrame: CGRectMake(theTableView.bounds.size.width - 225, (totalSize/2) - (35/2), 120 , 35)] autorelease];
[cell.contentView addSubview:priceLabel];
priceLabel.tag = PRICE_LABEL_TAG;
priceLabel.textAlignment = UITextAlignmentRight;
priceLabel.backgroundColor = [UIColor clearColor];
priceLabel.textColor = [UIColor redColor];
priceLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:22];