Измените UILabel.frame при изменении ориентации с помощью viewWillTransition - PullRequest
0 голосов
/ 15 мая 2019

Я программно создаю набор кнопок в viewDidLoad () моего UIInputViewController.Я пытаюсь изменить размер этих кнопок, когда ориентация меняется с альбомной на портретную и наоборот.

Я пытаюсь сделать это с помощью

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)

, но когда я прохожу тот же код, я использовал для создания своих кнопок в viewDidLoad () только с изменением UIlabel.frame для размещенияновые высота и ширина, вид не обновляется.Нужно ли сначала удалять кнопки и загружать их с нуля, или есть другой способ сделать это?

Ниже приведен полный код функции.

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    let width = screensize.width
    var height = CGFloat(141)
    let sizey = screensize.height

    switch sizey {
    case 1366:
        height = CGFloat(383-15)
    case 1112:
        height = CGFloat(320-15)
    case 812:
        height = CGFloat(141-15)
    case 1024:
        height = CGFloat(320-15)
    case 736:
        height = CGFloat(226-15)
    case 667:
        height = CGFloat(216-15)
    case 568:
        height = CGFloat(216-15)
    case 768:
        height = CGFloat(420-15)
    default:
        height = CGFloat(141-15)
    }

    connection.frame = CGRect(x: 0,         y: 0, width: width/2,     height: 15)
    serialNum.frame = CGRect( x: width/2,   y: 0, width: width/2,     height:15)

    plus.frame = CGRect(x:0,              y: 15,            width: width/5,height: height/4)
    minus.frame = CGRect(x:0,             y: height/4+15,   width: width/5,height: height/4)
    left.frame = CGRect(x:0,              y: height/2+15,   width: width/5,height: height/4)
    nextKeyboardButton.frame = CGRect(x:0,y: 3*height/4+15, width: width/5,height: height/4)

    num1.frame = CGRect(x:width/5,    y: 15,            width: width/5,height: height/4)
    num4.frame = CGRect(x:width/5,    y: height/4+15,   width: width/5,height: height/4)
    num7.frame = CGRect(x:width/5,    y: height/2+15,   width: width/5,height: height/4)
    comma.frame = CGRect(x:width/5,   y: 3*height/4+15, width: width/5,height: height/4)

    num2.frame = CGRect(x:width*2/5,y: 15,            width: width/5,height: height/4)
    num5.frame = CGRect(x:width*2/5,y: height/4+15,   width: width/5,height: height/4)
    num8.frame = CGRect(x:width*2/5,y: height/2+15,   width: width/5,height: height/4)
    num0.frame = CGRect(x:width*2/5,y: 3*height/4+15, width: width/5,height: height/4)


    num3.frame = CGRect(x:width*3/5,y: 15,            width: width/5,height: height/4)
    num6.frame = CGRect(x:width*3/5,y: height/4+15,   width: width/5,height: height/4)
    num9.frame = CGRect(x:width*3/5,y: height/2+15,   width: width/5,height: height/4)
    period.frame = CGRect(x:width*3/5,y: 3*height/4+15, width: width/5,height: height/4)

    back.frame = CGRect(x:width*4/5,      y: 15,            width: width/5,  height: height/4)
    spaceBar.frame = CGRect(x: width*4/5, y: height/4+15,   width: width/5,  height: height/4)
    right.frame =
        CGRect(x: width*4/5,    y: height/2+15,   width: width/5,  height: height/4)
    returnKey.frame = CGRect(x:width*4/5, y: height*3/4+15, width: width/5,  height: height/4)


    self.view.addSubview(spaceBar)
    self.view.addSubview(num1)
    self.view.addSubview(num2)
    self.view.addSubview(num3)
    self.view.addSubview(num4)
    self.view.addSubview(num5)
    self.view.addSubview(num6)
    self.view.addSubview(num7)
    self.view.addSubview(num8)
    self.view.addSubview(num9)
    self.view.addSubview(num0)
    self.view.addSubview(plus)
    self.view.addSubview(minus)
    self.view.addSubview(back)
    self.view.addSubview(left)
    self.view.addSubview(right)
    self.view.addSubview(period)
    self.view.addSubview(comma)
    self.view.addSubview(nextKeyboardButton)
    self.view.addSubview(returnKey)

Ответы [ 3 ]

1 голос
/ 16 мая 2019

Вам необходимо использовать аргумент «size», который вы получаете в методе «viewWillTransition», чтобы установить новые свойства «width» и «sizey» вместо «screenize».

0 голосов
/ 15 мая 2019

Поскольку вы добавили этот набор кнопок в viewDidLoad() вашего UIInputViewController, вам не нужно использовать addSubview в viewWillTransition to size методе.

Даже после вращенияустройство все еще использует старый размер экрана.

Изменить

let width = screensize.width
let sizey = screensize.height

На

let width = UIScreen.main.bounds.width
let sizey = UIScreen.main.bounds.height

Или

let width = size.width
let sizey = size.height
0 голосов
/ 15 мая 2019

Вы не должны вызывать addSubview при изменении ориентации, если вы уже добавили кнопки в viewDidLoad. Обновление фрейма должно быть достаточно.

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