#iphone #objective-c #three20
#iPhone #objective-c #three20
Вопрос:
Я впервые использую Three20, и я пытаюсь добавить TTStyledTextLabel в мою TTTableViewCell, используя следующий код:
@interface ConvoreCell : TTTableViewCell{
TTStyledTextLabel * tt_title;
UITextView * title;
UILabel * detailed;
}
@property (nonatomic, retain) IBOutlet UITextView * title;
@property (nonatomic, retain) IBOutlet UILabel * detailed;
@property (nonatomic, retain) TTStyledTextLabel * tt_title;
@end
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
if (self == [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) {
// Initialization code
tt_title = [[TTStyledTextLabel alloc] init];
tt_title.font = [UIFont systemFontOfSize:15];
[self.contentView addSubview:tt_title];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
CGRect frame = tt_title.frame;
frame.size.width = 640;
frame.size.height = tt_title.text.height;
frame.origin.x = 45;
frame.origin.y = 5;
tt_title.frame = frame;
}
and in my TTTableView I have:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CGFloat titleHeight = [TTStyledText textFromXHTML:[[self.posts objectAtIndex:indexPath.row] message] lineBreaks:YES URLs:YES].height;
//NSLog(@"HEIGHT IS %f", titleHeight);
return titleHeight 20;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ConvoreCell";
ConvoreCell *cell = (ConvoreCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[ConvoreCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
TTImageView * avatar = [[TTImageView alloc] initWithFrame:CGRectMake(cell.frame.origin.x 5, cell.frame.origin.y 5, 40, 40)];
avatar.urlPath = [[[self.posts objectAtIndex:indexPath.row] creator] img];
avatar.userInteractionEnabled = YES;
avatar.tag = indexPath.row;
[cell addSubview:avatar];
cell.tt_title.text = [TTStyledText textFromXHTML:[[self.posts objectAtIndex:indexPath.row] message] lineBreaks:YES URLs:YES];
}
Тем не менее, макет чертовски грязный. Почему это?
Комментарии:
1. что делает его беспорядочным? последняя строка? почему он пустой (без текста)?
2. вот почему это беспорядочно .. там должен быть текст, по какой-то причине его размер не изменяется, а все остальное после шестой строки не содержит текста
Ответ №1:
Я не могу найти ничего неправильного в вашем коде.
Глядя на изображение, меня поражает то, что последняя строка, которая отображается правильно, содержит ссылку.
Я подозреваю, что это может быть какая-то ошибка в TTStyledText
, которая, по моему опыту, не совсем подходит для отображения полного HTML.
Не могли бы вы попытаться подтвердить (или отклонить) эту гипотезу? Всегда ли URL-адрес в строке заставляет его «сходить с ума»?
В любом случае, это поможет установить точку останова в строке (или NSLog
после)
cell.tt_title.text = [TTStyledText textFromXHTML:[[self.posts objectAtIndex:indexPath.row] message] lineBreaks:YES URLs:YES];
и проверьте, что происходит cell.tt_title.text
.