2015-09-28 5 views
0

У меня возникла проблема, которая не может решить 2 дня. На изображении сервера и перед тем, как вставить их в поле, я разрежу их на клиенте, чтобы он соответствовал экрану. Все хорошо, но изображения меняются беспорядочно. Теперь высота рассчитывается независимо - пропорционально ширине. Нормальное изображение:Изменение размера изображения внутри tableviewcell

enter image description here

Плохое изображение

enter image description here

Я не могу просить явно UIImageView, потому что я динамически полагаюсь все ячейки различных устройств.

Моя функция изменения размера:

-(UIImage *)resizeImage :(UIImage *)theImage :(CGSize)theNewSize { 
UIGraphicsBeginImageContextWithOptions(theNewSize, NO, 1.0); 
CGFloat height = theImage.size.height; 
CGFloat newHeight = 0; 
newHeight = (theNewSize.width * height)/theImage.size.width; 
newHeight = floorf(newHeight); 
NSLog(@"new height image %f", newHeight); 
[theImage drawInRect:CGRectMake(0, 0, theNewSize.width, newHeight)]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 
} 

внутри layoutSubviews:

if(device == thisDeviceClass_iPhone5) { 
    [self.imageView setFrame:CGRectMake(0,0, 320, 255)]; //180 
    offset = 0; 
    padding = 5; 
} else if(device == thisDeviceClass_iPhone6){ 
    [self.imageView setFrame:CGRectMake(0,0, 375, 255)]; //211 
    offset = 25; 
} else if(device == thisDeviceClass_iPhone6plus) { 
    [self.imageView setFrame:CGRectMake(0,0, 414, 255)]; //233 
    offset = 40; 
} 

ответ

1

Ваш подход очень старая школа. Вы «жестко кодируете» размер изображения, что означает, что если в следующем году Apple придумает новый iPhone, который, опять же, будет иметь другой размер, у вас будут проблемы. Вы должны рассмотреть возможность использования ограничений автоматической компоновки, что является рекомендуемым приложением Apple (вот хороший учебник: http://www.raywenderlich.com/50317/beginning-auto-layout-tutorial-in-ios-7-part-1).

Вы также можете установить ImageView.contentMode в UIViewContentModeScaleAspectFill, который будет производить обрезку и изменять размер для вас.

+0

Да, я знаю, что это плохой код, это временное решение. Просто, если я не укажу точные размеры изображения, он перемещается независимо и передает размеры экрана в пользовательском классе ячейки, я не знаю, как это сделать. Нет переменной self.view. ... – user2759544

+0

Я установил этот contentMode, но не помог изображению исказить и понять, почему я не могу напрягаться. – user2759544

+0

Вы установили образ «Clip subviews» в ImageView для YES? – null

Смежные вопросы