Xcode и Swift. Ширина рассчитывается автоматически, но на iPhone Xr все хорошо, а на iPhone X выглядит плохо - PullRequest
2 голосов
/ 08 января 2020

В раскадровке:

in storyboard

В коде добавьте другой вид. Я кладу новый вид внутри синего вида и центрирую его

override func viewDidLoad() {
    super.viewDidLoad()

    print(viewTest.frame.width)

    let newView = UIView(frame: CGRect(x: 0, y: 0, width: 380, height: 100))
    newView.backgroundColor = .red

    let x = viewTest.frame.width / 2 - newView.frame.width / 2
    let y = viewTest.frame.height / 2 - newView.frame.height / 2

    newView.frame = CGRect(x: x, y: y, width: newView.frame.width, height: newView.frame.height)

    viewTest.addSubview(newView)

}

Хорошо смотрится на iPhone Xr iPhone Xr

Вкл. iPhone X проблема вид выходит за рамки iPhone X

Ответы [ 3 ]

2 голосов
/ 08 января 2020

В зависимости от размера экрана, замените

let newView = UIView(frame: CGRect(x: 0, y: 0, width: 380, height: 100))

на

let newView = UIView(frame: CGRect(x: 0, y: 0, width:view.frame.width - 40.0, height: 100))

. Лучше

newView.translatesAutoresizingMaskIntoConstraints = false
    viewTest.addSubview(newView)
    NSLayoutConstraint.activate([
        newView.centerYAnchor.constraint(equalTo:viewTest.centerYAnchor),
        newView.rightAnchor.constraint(equalTo:viewTest.rightAnchor,constant:-10),
        newView.leftAnchor.constraint(equalTo: viewTest.leftAnchor,constant:10), 
        newView.heightAnchor.constraint(equalToConstant:100)
    ])

Для исправления кадров доступа вид должен быть внутри viewDidLayoutSubviews, а не viewDidLoad

1 голос
/ 08 января 2020

Попробуйте это

override func viewDidLoad() {
    super.viewDidLoad()
    print(viewTest.frame.width)
    let newView = UIView(frame: CGRect(x: 10, y: 10, width: viewTest.frame.width-20, height: viewTest.frame.height-20))
    newView.backgroundColor = .red
    viewTest.addSubview(newView)

}
0 голосов
/ 08 января 2020

Спасибо, только это сработало для меня:

newView.translatesAutoresizingMaskIntoConstraints = false
viewTest.addSubview(newView)
NSLayoutConstraint.activate([
    newView.centerYAnchor.constraint(equalTo:viewTest.centerYAnchor),
    newView.rightAnchor.constraint(equalTo:viewTest.rightAnchor,constant:-10),
    newView.leftAnchor.constraint(equalTo: viewTest.leftAnchor,constant:10), 
    newView.heightAnchor.constraint(equalToConstant:100)
])

другие параметры не работают, независимо от того, что я делаю в viewDidLayoutSubviews или viewDidLoad view.width одинаково для iPhone X и iPhone Xr, но ширина экрана отличается

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