Как получить текущий размер подпредставления при изменении размера устройства в 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
был добавлен.
Попробуйте это, вы можете найти размер экрана устройства.
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)