Как получить текущий размер подпредставления при изменении размера устройства в Swift?

Я должен просмотреть: view_1 и view_2 . Высота view_1 пропорциональна высоте контроллера основного вида, и я добавляю view_2 программно как подпредставление view_1 с пропорциональной высотой.

проблема

когда размер устройства изменяется, скажем, с iPhone 6 на iPhone 5, view_1 корректно корректируется, но его высота, которую я передаю функции для отрисовки своего подпредставления view_2, остается той же, что была задана в конструкторе интерфейса, и поэтому iPhone 4 выходит за пределы при перемещении с iPhone 6

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

3 ответа

Решение

Размер представления не устанавливается до тех пор, пока не запустится Auto Layout. Ваша первая возможность получить правильный размер в viewDidLayoutSubviews:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    // access view size here
}

Вот полный пример, который добавляет второе представление как подпредставление первого представления. Красный вид был добавлен в раскадровку; он центрируется по горизонтали и вертикали, а его высота / ширина составляет 50% от его суперпредставления.

Желтый вид добавляется программно. Его кадр вычисляется из кадра красного вида, чтобы он составлял 50% ширины красного вида.

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var view1: UIView!
    var view2: UIView?

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        if view2 == nil {
            view2 = UIView()
            view2?.backgroundColor = .yellowColor()
            view1.addSubview(view2!)
        }

        let width = view1.frame.size.width
        let height = view1.frame.size.height

        let frame = CGRect(x: width * 0.25, y: height * 0.25, width: width * 0.5, height: height * 0.5)

        view2?.frame = frame
    }
}

Не то viewDidLayoutSubviews вызывается несколько раз, поэтому вы должны быть осторожны, чтобы не добавить view2 каждый раз это называется. Вот почему код проверяет, если view2 был добавлен.


Портрет симулятора iPhone 4s


iPhone 5s Симулятор Пейзаж


iPhone 5s Вращение exmaple

Попробуйте это, вы можете найти размер экрана устройства.

let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width
let screenHeight = screenSize.height

Попробуйте сделать это в Viewdidload. Сначала вам нужно установить вид на один кадр.

view_1.frame = CGRectMake(0 , 0, self.view.frame.width, self.view.frame.height) 

затем установите рамку view_2

view_2.frame = CGRectMake(0 , 0, view_1.frame.width, view_1.frame.height) 
Другие вопросы по тегам