2016-03-09 3 views
0

Я хочу изображение с фиксированной шириной, но с переменной высотой. Я хочу обновить представление, если изображение, которое я получаю с сайта, более яркое, чем изображение в раскадровке,Фиксированная ширина, переменная высота изображения ios layout

Это представление, когда я использую «Масштаб для заполнения».

postimg.org/image/6l1ol2pvz

И это, когда я использую "Аспект Fill"

postimg.org/image/9duw53q8f/

Я хочу, чтобы изображение было как в " Aspect Fill ", но я не могу правильно разместить дно.

Спасибо всем!

Решение:

Я дал ширину и высоту изображения ограничений. Затем я программно изменил его. Это то, что я хотел, и я сделал это!

http://i.stack.imgur.com/PCgHw.png

let imageData = NSData(contentsOfURL: imgUrl) 
let myImage = UIImage(data: imageData!) 
let aspectRatio = (myImage?.size.height)!/(myImage?.size.width)! 

self.postCombineImageViewHeight.constant = UIScreen.mainScreen().bounds.size.width * aspectRatio 
self.postCombineImageViewWidth.constant = UIScreen.mainScreen().bounds.size.width 

Спасибо всем за помощь!

+0

Я думаю, что Роб имеет правильное решение. Это очень похоже на то, что изображение переполняет границы UIImageView. –

+0

Вид вашего контейнера, который имеет изображение, должен иметь тип UIScrollView. –

ответ

2

Вы можете сделать ограничение по высоте в раскадровке затем перетащить ограничение IBOutlet в ViewController и изменить свой постоянный когда получит ImageView с сайта

+0

Спасибо, это решение для меня. Но я хочу спросить одну вещь. Я установил свое изображение в библиотеке alamofireImage. Это код, который я использую. self.postCombineImageView.af_setImageWithURL (imgUrl) Как я могу получить это изображение в ширину и высоту imgUrl? Если я использую эти коды с _afsetImageWithURL, он будет загружать x2 раза? let imageData = NSData (содержимоеOfURL: imgUrl) let myImage = UIImage (данные: imageData!) let aspectRatio = (myImage? .size.height)!/(myImage? .size.width)! –

0

Вы используете раскадровки? А авто макет?

Попробуйте это: поместите ограничение «вертикального расстояния» между нижней частью фотографии и верхней частью представления, которая находится внизу.

Затем щелкните добавленное ограничение, и в инспекторе атрибутов измените отношение к «Больше или равно».

Таким образом, высота изображения будет соответствовать содержимому изображения; но если высота изображения слишком велика, она перестанет расти, когда она достигнет нижнего представления.

3

Вы должны выбрать «просмотр подзапроса» в «Инспекторе атрибутов» этого изображения в IB (или программно установить свойство изображения изображения).

Например, это пейзаж изображение, показанное на квадратный зрения изображения с моделью содержимого «аспект заливки», но с «клип подвиды» снят (т.е. с clipToBounds набор для false):

enter image description here

(я добавил красный CAShapeLayer, чтобы показать, где frame из UIImageView есть.)

Это тот же вид изображения, но с «клипом» подобозрением проверяемого (т.е.clipToBounds свойство true):

enter image description here


В качестве альтернативы, вы можете выбрать «аспект подходит», а не «аспект заливки», в этом случае все изображение будет видно и не искажается, но вы может в конечном итоге с пустым пространством по краям фото:

enter image description here

0

Мое решение -

1) Обеспечьте ограничение по высоте и ширине для вашего изображения.

2) Импортный комплект AVFoundation.

3) Создание нового прямоугольника для вашего изображения с помощью следующего кода (подгоняя его через соотношение сторон) -

let boundingRect = CGRect(x: 0, y: 0, width: width, height: CGFloat(MAXFLOAT))//width is your fixed width for your image eg. - if your image covers width of your superview. It can be - self.view.frame.width 

      let rect = AVMakeRectWithAspectRatioInsideRect(photo.image.size, boundingRect) 

Итак, теперь вы получили ваш прямоугольник -

Теперь вы можете изменить ограничение высоты имея что-то вроде этого -

imageHeightConstraint.constant = rect.size.height 
0

Вы можете сделать это программно с помощью NSLayoutConstraint

self.addConstraint(NSLayoutConstraint(
     item: myButton, 
     attribute: .Width, 
     relatedBy: .Equal, 
     toItem: nil, 
     attribute: .NotAnAttribute, 
     multiplier: 1.0, 
     constant: 200)) 

И для высоты добавить переменную высоту

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