2016-11-05 3 views
1

Я добавил UIView к ячейке таблиц через мой раскадровки со следующими ограничениями:Использования Autolayout ограничений программного центрировать UIImageView внутри UIView Swift 2.3 iOS10

enter image description here

Тогда я следующим кодом программно добавить UIImageView в UIView выше и размер его в соответствии с ориентацией экрана.

  //Use half the screen size width when on an iPhone and on Landscape 
      let image: UIImage = UIImage(named: HEADER_IMAGE_BATH)! 
      imageView = UIImageView(image: image) 
      imageView!.frame = CGRectMake(0 , 0, self.view.frame.width/2, 185) 
      imageView!.contentMode = .ScaleAspectFit 
      //center image 
      let centerXConst = NSLayoutConstraint(item: imageView!, attribute: .CenterX, relatedBy: .Equal, toItem: imageWrapperView, attribute: .CenterX, multiplier: 1, constant: 1) 
      let centerYConst = NSLayoutConstraint(item: imageView!, attribute: .CenterY, relatedBy: .Equal, toItem: imageWrapperView, attribute: .CenterY, multiplier: 1, constant: 1) 
      NSLayoutConstraint.activateConstraints([centerXConst, centerYConst]) 
      //add to sub view 
      imageWrapperView.addSubview(imageView!) 

Однако мое изображение не центрируется, когда в ландшафте. Мое изображение - только половина ширины экрана, и я хотел бы сосредоточить его внутри моего UIView. Что мне не хватает? Благодаря

ответ

2
  1. Вы должны использовать Auto Layout вместо рамы по ширине и высоте ImageView
  2. Вы должны добавить ImageView к imageWrapperView, прежде чем добавить ограничения
  3. Вы должны установить imageView.translatesAutoresizingMaskIntoConstraints ложному

Затем окончательный код:

//Use half the screen size width when on an iPhone and on Landscape 
    let image: UIImage = UIImage(named: "key.png")! 
    let imageView = UIImageView(image: image) 
    imageView.contentMode = .ScaleAspectFit 
    imageView.translatesAutoresizingMaskIntoConstraints = false 

    //add to sub view 
    imageWrapperView.addSubview(imageView) 

    //center image 
    let centerXConst = NSLayoutConstraint(item: imageView, attribute: .CenterX, relatedBy: .Equal, toItem: imageWrapperView, attribute: .CenterX, multiplier: 1.0, constant: 0.0) 
    let centerYConst = NSLayoutConstraint(item: imageView, attribute: .CenterY, relatedBy: .Equal, toItem: imageWrapperView, attribute: .CenterY, multiplier: 1.0, constant: 0.0) 

    let heightConstraint = NSLayoutConstraint(item: imageView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 185.0) 
    let widthConstraint = NSLayoutConstraint(item: imageView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: self.view.frame.width/2) 
    imageView.addConstraints([heightConstraint, widthConstraint]) 

    NSLayoutConstraint.activateConstraints([centerXConst, centerYConst]) 
0

Wh ru, вы используете автозапуск, не пытайтесь изменить рамки просмотров. Если вам нужно изменить фрейм, лучше возьмите выходные точки ограничений и измените их программно.

В вашем вопросе, чтобы центрировать выравнивание изображения, вы можете сделать это, поставив 4 ограничения. Задайте высоту и ширину изображенияView, а два других - горизонтально и вертикально.

Это основной способ выравнивания по центру любого типа.

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