Центральное выравнивание subView - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь центрировать UIView в другом виде (так, как во всплывающем окне), но что бы я ни делал, я просто не могу выровнять его по центру!

func loadPopUpView() {
    let customView = CGRect(x: view.center.x, y: view.center.y, width: 100, height: 100)
    popUpView = UIView(frame: customView)
    popUpView.backgroundColor = UIColor.black
    view.addSubview(popUpView)

    popUpView.isHidden = false
}

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

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Вы говорите, чтобы он поместил верхний левый угол в центр, следовательно, вы должны позволить ему получить половину размера в положении.

let customView = CGRect(x: view.center.x-50, y: view.center.y-50, width: 100, height: 100)

Другим решением является использование anchorpoints.

customView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
customView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
customView.heightAnchor.constraint(equalToConstant: 100).isActive = true
customView.widthAnchor.constraint(equalToConstant: 100).isActive = true
0 голосов
/ 03 июля 2018

На CGRect(x:, y:, width:, height:) точка (x, y) является началом координат. В iOS это верхняя левая точка.

На CGRect Документ :

В координатном пространстве Core Graphics по умолчанию находится источник в нижнем левом углу прямоугольника и прямоугольник расширяется к верхнему правому углу. Если контекст имеет пространство с перевернутыми координатами - часто это происходит в iOS - источник находится в верхний левый угол и прямоугольник простирается к нижнему правому угол.

Итак, чтобы это исправить:

let width = 100.0
let height = 100.0
let customViewFrame = CGRect(x: view.center.x - width/2.0, y: view.center.y - height/2.0, width: width, height: height)

Другим решением будет применение центра после установки рамки (особенно ширины / размера).

let customViewFrame = CGRect(x: 0, y: 0, width: 100, height: 100)
customViewFrame = view.center
0 голосов
/ 03 июля 2018

Вам также нужно минус половину значения высоты и ширины вашего пользовательского вида от x и y, как показано ниже:

let customView = CGRect(x: view.center.x - 50, y: view.center.y - 50, width: 100, height: 100)
...