使用viewWillTransition更改方向时更改UILabel.frame

时间:2019-05-15 18:05:44

标签: ios swift xcode uibutton

我以编程方式在UIInputViewController的viewDidLoad()中创建了一组按钮。当方向从横向更改为纵向时,我试图更改这些按钮的大小,反之亦然。

我正在尝试通过使用

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 个答案:

答案 0 :(得分:1)

您需要使用在“ viewWillTransition”方法中获得的“ size”参数来设置新的“ width”和“ sizey”属性,而不是“ screensize”。

答案 1 :(得分:0)

如果您已经在addSubview中添加了按钮,则不应在方向更改上致电viewDidLoad。更新框架就足够了。

答案 2 :(得分:0)

由于您已经在viewDidLoad()的{​​{1}}中添加了这组按钮,因此无需在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