Почему UIView заполняет superView? - PullRequest
0 голосов
/ 13 марта 2019

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

Я проверял, не задавался ли этот вопрос ранее, но по какой-то причине я могу только найти ответы на вопрос, как заполнить весь вид.

Я был бы очень признателен, если бы кто-то мог помочь критиковать мой код и объяснить, как позиционировать подпредставление вместо заполнения всего суперпредставления.

class JobViewController: UIViewController {
    var subView : SubView { return self.view as! SubView }
    var requested = false

    let imageView: UIImageView = {
        let iv = UIImageView(image: #imageLiteral(resourceName: "yo"))
        iv.contentMode = .scaleAspectFill
        iv.isUserInteractionEnabled = true
        iv.translatesAutoresizingMaskIntoConstraints = false
        return iv
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(imageView)
        imageView.fillSuperview()

        subView.requestAction = { [ weak self ] in
            guard let strongSelf = self else { return }
            strongSelf.requested = !strongSelf.requested
            if strongSelf.requested {
                UIView.animate(withDuration: 0.5, animations: {
                    strongSelf.subView.Request.setTitle("Requested", for: .normal)
                    strongSelf.subView.contentView.backgroundColor = UIColor.red.withAlphaComponent(0.5)
                })
            } else {
                UIView.animate(withDuration: 0.5, animations: {
                    strongSelf.subView.Request.setTitle("Requested", for: .normal)
                    strongSelf.subView.contentView.backgroundColor = UIColor.blue
                })
            }
        }
    }

    override func loadView() {
     // I know the issue lies here, but how would I go about setting the frame of the subview to just be positioned on top of the mainView?
        self.view = SubView(frame: UIScreen.main.bounds)
    }
}

У меня есть подпроцесс, встроенный в отдельный файл, я не уверен, нужна ли мне его информация, так как это только то, что находится внутри подпредставления.

1 Ответ

0 голосов
/ 13 марта 2019

Вы должны добавить свой subView как подпредставление self.view и не устанавливать его равным вашему основному представлению. Затем установите соответствующие ограничения.

override func viewDidLoad() {
    self.view.addSubview(subView)
    subview.translatesAutoresizingMaskIntoConstraint = false
    addSubview.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 0).isActive = true
    addSubview.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: 0).isActive = true
    addSubview.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 0).isActive = true
    addSubview.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: 0).isActive = true
}

Что касается вашей проблемы инициализации, попробуйте:

var subView = SubView()

Надеюсь, я правильно понял ваш вопрос.

...