2015-01-21 7 views
0

Я использую пользовательский uiview для асинхронной загрузки и изменения его свойства изображения после успеха.Добавление пользовательского uiView в свойство UITableViewCell imageView

Я могу добавить статические изображения в UITableViewCell со стилем UITableViewCellStyleSubtitle со следующим кодом:

 CGRect viewRect = CGRectMake(-20, -20, 40, 40); 
     cell.imageView.frame = viewRect; 

     [cell.imageView setImage:[UIImage imageNamed:@"example"]]; 
     [cell.imageView setContentMode:UIViewContentModeScaleAspectFill]; 
     [cell.imageView setClipsToBounds:YES]; 
     [cell.imageView.layer setBorderColor:[UIColor orangeColor].CGColor]; 
     [cell.imageView.layer setBorderWidth:1.0]; 
     [cell.imageView.layer setCornerRadius:cell.imageView.frame.size.width/1.25]; 

, но когда я пытаюсь добавить свой собственный UIView с помощью:

 PAAImageView *avatarView = [[PAAImageView alloc] initWithFrame:cell.imageView.frame backgroundProgressColor:[UIColor whiteColor] progressColor:[UIColor lightGrayColor]]; 
     [cell.imageView addSubview:avatarView]; 
     [cell.imageView bringSubviewToFront:avatarView]; 
     [cell.imageView setClipsToBounds:YES]; 
     [cell.imageView.layer setBorderColor:[UIColor orangeColor].CGColor]; 
     [cell.imageView.layer setBorderWidth:1.0]; 
     [cell.imageView.layer setCornerRadius:cell.imageView.frame.size.width/1.25]; 

пользовательский UIView никогда не появляется. Есть ли отдельный способ сделать это?

EDIT

Я назначая шаблонное изображение, а затем положить PAAImageview поверх него. Как и раньше, чтобы установить статическое изображение, ниже добавляется представление, но оно по-прежнему имеет размер в кадре (-20, -20, 40, 40), в то время как cell.imageView взорван (я думаю, из-за UIViewContentModeScaleAspectFill). Как я могу получить этот PAAImageView в верхней части изображения-заполнителя?

 PAAImageView *avatarView = [[PAAImageView alloc] initWithFrame:cell.imageView.bounds backgroundProgressColor:[UIColor whiteColor] progressColor:[UIColor lightGrayColor]]; 
     [avatarView setContentMode:UIViewContentModeScaleAspectFill]; 
     avatarView.progressColor = [UIColor orangeColor]; 
     [cell addSubview:avatarView]; 
+0

Вы добавляете пользовательские UIView к ImageView, является то, что вы хотите? возможно, вам нужно добавитьSubview в ячейку, а не в imageView. –

+0

@FabioCardoso. Но не изменился ли текст, одно из преимуществ UITableViewCellStyleSubtitle? – DaynaJuliana

+1

Изображение ячейки изображения отображается только и определяется, когда вы назначаете ему изображение. Вы никогда не присваиваете изображение «cell.imageView», поэтому он никогда не будет установлен. Это означает, что представление, которое вы добавляете к представлению изображения, не будет видно. Создайте свой собственный класс ячеек с помощью 'PAAImageView' и двух ярлыков по мере необходимости. Затем вы можете разделить три вида по мере необходимости. – rmaddy

ответ

2

Я в конечном итоге решил это и разместил решение для заинтересованных. Нижеследующие работы, но могут быть четко реорганизованы в общий случай.

Ключ должен был НЕ установить мой пользовательский вид avatarView.frame = cell.imageView, потому что размер и ширина кадра корректировались при рисовании cell.imageView. Я не совсем уверен, ПОЧЕМУ, но работала avatarView.frame.size.width or height = 1.5 * cell.imageView.frame.size.width or height.

Возможно, это связано с тем, что установка [cell.imageView setContentMode:UIViewContentModeScaleAspectFill] изменяет размер кадра в момент их намотки, или cell.imageView игнорирует его свойство кадра при рисовании. ИЛИ [cell.imageView.layer setCornerRadius:cell.imageView.frame.size.width/1.25]; выбросил что-то.

Даже установка avatarView.frame = cell.imageView в willDisplayCell не работает.

Я проверил это на связке различных экранов, и это сработало. Также вручную смена первой строки на CGRect viewRect = CGRectMake(-20, -20, 60, 60); & CGRect viewRect = CGRectMake(-40, -40, 60, 60); & CGRect viewRect = CGRectMake(-40, -40, 80, 80); не работает, поскольку изображение больше не выходит наружу.

фактический код

//manually assigning frame to imageView and image 
CGRect viewRect = CGRectMake(-20, -20, 40, 40); 
cell.imageView.frame = viewRect; 
[cell.imageView setImage:[UIImage imageNamed:@"example"]]; 

//adding actual image. 
    PAAImageView *avatarView = [[PAAImageView alloc] initWithFrame:CGRectMake(cell.imageView.bounds.origin.x, cell.imageView.bounds.origin.y, cell.imageView.frame.size.width*1.5, cell.imageView.frame.size.height*1.5) backgroundProgressColor:[UIColor whiteColor] progressColor:[UIColor lightGrayColor]]; 
    [cell.imageView addSubview:avatarView]; 
    [cell.imageView bringSubviewToFront:avatarView]; 

    //adjusting image view to cirle 
    [cell.imageView.layer setBorderColor:[UIColor orangeColor].CGColor]; 
    [cell.imageView.layer setBorderWidth:1.0]; 
    [cell.imageView setContentMode:UIViewContentModeScaleAspectFill]; 
    [cell.imageView setClipsToBounds:YES]; 
    [cell.imageView.layer setCornerRadius:cell.imageView.frame.size.width/1.25]; 
Смежные вопросы