iOS - Невозможно получить пользовательский вид для центрирования в UIViewController - PullRequest
0 голосов
/ 10 апреля 2020

У меня ужасные проблемы с отображением пользовательского представления в UIViewController. Я новичок в iOS и не уверен, правильно ли я ограничиваю это.

У меня есть BaseTabBarController, который настраивает мои три вкладки и контроллеры, которые отлично работают. Это в моем MainFeedViewController, где у меня проблемы с ограничением моих пользовательских представлений. В настоящее время мой пользовательский вид отображается либо в левом верхнем углу устройства, либо при программной установке ограничений, как показано ниже, вид привязывается к правой стороне экрана, и когда устройство вращается, создается впечатление, что контроллер представления сохраняет свои Размер портрета в ландшафтном режиме.

Я сбит с толку и нуждаюсь в некоторых инструкциях по правильной настройке ограничений для центрирования вида.

Кроме того, я должен установить размер моего пользовательского представления в его Xib или он будет соответствовать размеру представления, установленному для контейнера в MainFeedViewController?

class MainFeedViewController: UIViewController {

  @IBOutlet weak var articlePreview: ArticlePreviewView!

  override func viewDidLoad() {
    super.viewDidLoad()
      setupView()
    }

    func setupView() {
      view.backgroundColor = UIColor(named: "standardBackgroundColor")
      articlePreview.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
      articlePreview.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
      articlePreview.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
      articlePreview.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

    }
}
class ArticlePreviewView: UIView {

  @IBOutlet var contentView: UIView!
  @IBOutlet weak var articleInfoContainer: UIView!

  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    initSubviews()
  }

  override init(frame: CGRect) {
    super.init(frame: frame)
    initSubviews()
  }

  func initSubviews() {
    let nib = UINib(nibName: "ArticlePreviewView", bundle: nil)
    nib.instantiate(withOwner: self, options: nil)
    addSubview(contentView)
    contentView.frame = self.bounds
    contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    setupViewTheme()
  }

  func setupViewTheme() {
    contentView.backgroundColor = .blue
    //articleInfoContainer.backgroundColor = .white
  }
}

enter image description here

1 Ответ

0 голосов
/ 10 апреля 2020

Не следует смешивать автоматическое расположение с маской автоматического изменения размера и размером кадра. Удалите код в ArticlePreviewView, который устанавливает фрейм и autoResizingMask, и используйте ограничения, если вы хотите, чтобы представление заполнило его суперпредставление, вы можете использовать

        view.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            view.leadingAnchor.constraint(equalTo: superview.leadingAnchor),
            view.bottomAnchor.constraint(equalTo: superview.bottomAnchor),
            view.trailingAnchor.constraint(equalTo: superview.trailingAnchor),
            view.topAnchor.constraint(equalTo: superview.topAnchor)
            ])
...