Итак, проблема с UITableViewCell заключается в том, что вы не можете контролировать размер встроенных объектов (а именно imageView, contentView, accessoryView, backgroundView ).Когда таблица изменяется, ваши настройки растоптаны.
Вы можете, как указал Бехлул, принудительно настроить размеры, используя layoutSubviews , но проблема в том, что layoutSubviewsвызывается каждый раз, когда стол прокручивается.Это большое количество ненужных вызовов для изменения макета.
Альтернативный метод - добавить все вашего контента в contentView .Аналогичным образом, если вы настраиваете фон, вы можете создать прозрачный backgroundView и добавить свой собственный фоновый вид (например, myBackgroundView ) как подпредставление backgroundView .
Таким образом, вы можете размещать и изменять размеры ваших предметов так, как вам нужно.
Недостатком является то, что стоковые сообщения больше не принимаются из дополнительных принадлежностей или изображений.Вам просто нужно создать себя.
Надеюсь, это поможет!
// This code is not tested
// MyCustomTableViewCell
- (id) init{
self = [super initWithStyle: UITableViewCellStyleDefault reuseIdentifier:@"MyReuseIdentifier"];
if(self){
//image view
my_image_view = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"default_image.png"]] retain];
[my_image_view setFrame:CGRectMake(10,10,30,30)];
[self.contentView addSubview:my_image_view];
//labels
my_text_label = [[[UILabel alloc] initWithFrame:CGRectMake(50,10,100,15)] retain];
[self.contentView addSubview:my_text_label];
//set font, etc
//detail label
my_detail_label = [[[UILabel alloc] initWithFrame:CGRectMake(50,25,100,15)] retain];
[self.contentView addSubview:my_detail_label];
//set font, etc
//accessory view
//Whatever you want to do here
//attach "accessoryButtonTapped" selector to button action
//background view
UIView* background_view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 50)] autorelease];
[background_view setBackgroundColor:[UIColor greenColor]];
background_view.layer.cornerRadius = 17;
background_view.layer.borderWidth = 3;
background_view.layer.borderColor = [UIColor whiteColor].CGColor;
[self setBackgroundView:[[[UIView alloc] init] autorelease]];
[self.backgroundView addSubview:background_view];
}
return self;
}
- (void) setLabelText: (NSString*) label_text{
[my_text_label setText:label_text];
}
- (void) setDetailText: (NSString*) detail_text{
[my_detail_label setText: detail_text];
}
- (void) accessoryButtonTapped{
//call table view delegate's accessoryButtonTappedForRowWithIndexPath method
}