Ответ 1
Решение автоматической компоновки
С тех пор, как вы установили, что используете свой автоматический макет в своем проекте, я сделал демонстрационное приложение, чтобы показать вам, как вы можете изменить образ изображения и настроить высоту. Автоматический макет сделает это автоматически, но уловка заключается в том, что фотография, которую вы будете использовать, поступает из галереи пользователей, и поэтому они, вероятно, будут очень большими и это.
Итак, проверьте приложение: https://bitbucket.org/danielphillips/auto-layout-imageview
Трюк заключается в создании ссылки на NSLayoutConstraint
высоты представления изображения. Когда вы меняете свое изображение, вам нужно отрегулировать его постоянным до нужной высоты с учетом фиксированной ширины.
Другим решением может быть установка contentMode
в вашем представлении изображения, с помощью UIViewContentModeScaleAspectFit
ваше изображение будет всегда отображаться в полном объеме, но будет заблокировано до границ изображения, которое может измениться на основе Auto Ограничения макета, которые у вас есть.
Начальный ответ
Похоже, вы действительно слишком усложнили это, если я не пропустил что-то.
Когда вы получаете новое изображение из подборщика изображений, все, что вам нужно сделать, это изменить кадр изображения в соответствии с размером UIImage
.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
image = [info objectForKey:UIImagePickerControllerOriginalImage];
[self.imageView setImage:image];
self.imageView.frame = CGRectMake(self.imageView.frame.origin.x
self.imageView.frame.origin.y
image.size.width
image.size.height);
[self dismissViewControllerAnimated:YES completion:NULL];
}
Конечно, это будет потенциально очень большой (он использует исходное изображение, которое может быть очень большим).
Итак, давайте заблокируем ширину до 280 точек... таким образом, мы всегда можем иметь полное изображение на экране в портретном режиме.
Таким образом, если ваш размер изображения составляет 1000x800, и наш образ изображения может быть 280x100. Мы можем рассчитать правильную высоту изображения, сохраняя ширину изображения таким образом:
CGSize imageSize = CGSizeMake(1000.0, 800.0);
CGSize imageViewSize = CGSizeMake(280.0, 100.0);
CGFloat correctImageViewHeight = (imageViewSize.width / imageSize.width) * imageSize.height;
self.imageView.frame = CGRectMake( self.imageView.frame.origin.x,
self.imageView.frame.origin.x,
CGRectGetWidth(self.imageView.bounds),
correctImageViewHeight);