2015-12-11 5 views
1

Проблема, что у меня есть, так это то, что UIView получает нежелательное дополнение. Кажется, что рама UIView изменяет размеры на основе высоты UIImage.Dynamic UIView size

These are my constraints on the UIView

Illustrative GIF

Сотовый Конфигурация:

// Configure the cell... 
    let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: cell.testView.frame.width, height: cell.testView.frame.height)) 

    imageView.image = UIImage(named: "eiffel.JPG") 
    imageView.autoresizingMask = .FlexibleWidth 
    imageView.contentMode = .ScaleAspectFit 
    imageView.center = cell.testView.center 
    imageView.clipsToBounds = true 
    imageView.translatesAutoresizingMaskIntoConstraints = false 


    cell.testView.addSubview(imageView) 

    let bottomMarginConstraint = NSLayoutConstraint(item: imageView, attribute: .Bottom, relatedBy: .Equal, toItem: cell.testView, attribute: .Bottom, multiplier: 1, constant: 0) 

    let topMarginConstraint = NSLayoutConstraint(item: imageView, attribute: .Top, relatedBy: .Equal, toItem: cell.testView, attribute: .Top, multiplier: 1, constant: 0) 

    let trailingMarginConstraint = NSLayoutConstraint(item: imageView, attribute: .Left, relatedBy: .Equal, toItem: cell.testView, attribute: .Left, multiplier: 1, constant: 0) 

    let leadingMarginConstraint = NSLayoutConstraint(item: imageView, attribute: .Right, relatedBy: .Equal, toItem: cell.testView, attribute: .Right, multiplier: 1, constant: 0) 

    //let widthConstraint = NSLayoutConstraint(item: imageView, attribute: .Width, relatedBy: .Equal, toItem: .None, attribute: .NotAnAttribute, multiplier: 1, constant: imageView.superview!.frame.width) 

    let constraints = [bottomMarginConstraint, topMarginConstraint, leadingMarginConstraint, trailingMarginConstraint] 

    cell.testView.addConstraints(constraints) 

UIView является тот, с светло-зеленым фоном и Cell один с розовым фоном.

ответ

-2

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

0

Думаю, вы можете нарисовать UIImageView в xib тоже. Размер UIImageView также будет изменен при изменении изображения в Auto layout. Вам просто нужно подтвердить позицию UIImageView.

Когда Tableview нужно знать высоту этой клетки, вернуть cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingExpandedSize).size.height + 1 вычислить высоту contentView клетки и 1.f из Seperator линии

1

Это может быть из-за края, которые добавляются по умолчанию при использовании автоматической компоновки. Снимите флажок с раскадровки.

  • Uncheck "Constrain to margin"

Method 1

Или

  • Uncheck "Relative To Margin"

Method 2

  • Попытка удалить программно

imageView.layoutMargins = UIEdgeInsetsMake(0, 0, 0,0);

Смотреть Подробнее: iOS8 Auto layout programatically pin to relative layout margin

Apple Doc Autolayout

+0

Это не сработало для меня! Я загрузил свой проект здесь -> https://www.dropbox.com/s/ikmvtgk6gs12epl/UIImageViewRatioFullSizeTest.zip?dl=0, пожалуйста, помогите! Я reeeeeally не знаю, что делать сейчас :( –