Добавление UIView в центр ViewController | AutoLayout - PullRequest
0 голосов
/ 26 мая 2020

Итак, я создал представление индикатора выполнения, которое я показываю при вызовах API. Я создал для него собственный класс UIView.

Теперь все работает нормально. Но позиция обзора должна быть в центре, но это не так.

Я думаю, что у меня есть ограничения, но все еще не работает.

Вот мой код:

import Foundation
import UIKit
import UICircularProgressRing
import HGRippleRadarView


class ProgressIndicator : UIView {

    @IBOutlet weak var contentView : UIView!
    @IBOutlet weak var progressView : UICircularProgressRing!
    @IBOutlet weak var logoContainerView : UIView!
    @IBOutlet weak var rippleView : RippleView!

    static let shared = ProgressIndicator()

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

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

    func commonInit() {
        Bundle.main.loadNibNamed("ProgressIndicator", owner: self, options: nil)
        addSubview(contentView)

    }

    public func show(controller : UIViewController) {
        setupLoadingView(controller : controller)
    }

    public func hide() {
        removeLoadingView()
    }

    private func setupLoadingView(controller : UIViewController) {

        controller.view.addSubview(self)

        // adding contrints on main view
        let leadingConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutConstraint.Attribute.leading, relatedBy: NSLayoutConstraint.Relation.equal, toItem: controller.view, attribute: NSLayoutConstraint.Attribute.leading, multiplier: 1, constant: 0)

        let trailingConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutConstraint.Attribute.trailing, relatedBy: NSLayoutConstraint.Relation.equal, toItem: controller.view, attribute: NSLayoutConstraint.Attribute.trailing, multiplier: 1, constant: 0)

        let topConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: controller.view, attribute: NSLayoutConstraint.Attribute.top, multiplier: 1, constant: 0)

        let bottomConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: controller.view, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: 0)

        controller.view.addConstraints([leadingConstraint, trailingConstraint, topConstraint, bottomConstraint])

        // adding constraints on content view

        let leadingConstraint1 = NSLayoutConstraint(item: self.contentView!, attribute: NSLayoutConstraint.Attribute.leading, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self, attribute: NSLayoutConstraint.Attribute.leading, multiplier: 1, constant: 0)

        let trailingConstraint1 = NSLayoutConstraint(item: self.contentView!, attribute: NSLayoutConstraint.Attribute.trailing, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self, attribute: NSLayoutConstraint.Attribute.trailing, multiplier: 1, constant: 0)

        let topConstraint1 = NSLayoutConstraint(item: self.contentView!, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self, attribute: NSLayoutConstraint.Attribute.top, multiplier: 1, constant: 0)

        let bottomConstraint1 = NSLayoutConstraint(item: self.contentView!, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: 0)

        self.addConstraints([leadingConstraint1, trailingConstraint1, topConstraint1, bottomConstraint1])


        self.setNeedsLayout()
        self.reloadInputViews()
        self.layoutIfNeeded()


    }

}

Вот результат m получения:

enter image description here

И вот это скриншот файла xib

enter image description here

1 Ответ

1 голос
/ 27 мая 2020

Вы добавили ограничения, но не установили translatesAutoresizingMaskIntoConstraints на false.

self.translatesAutoresizingMaskIntoConstraints = false
self.contentView.translatesAutoresizingMaskIntoConstraints = false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...