有没有办法知道viewDidLoad或viewWillAppear中的自定义键盘框架?

时间:2015-04-29 04:50:25

标签: ios swift ios8 custom-keyboard ios8-extension

我正在开发自定义键盘扩展程序并注意到当我在self.inputView.frame.size.widthviewDidLoad中调用viewWillAppear时,它会返回0或错误的数字。仅在viewDidAppear中才是正确的。这是一个问题,因为我需要根据可用的宽度和高度更新键盘中元素的大小。现在我通过检测viewWillLayoutSubviews中的帧大小来处理这个问题,在正确之前调用它几次。这样可以工作,但是用户可以看到键盘中的元素大小发生变化 - 直到框架呈现给用户之后,框架才会正确。这也是一个问题,因为一旦元素的大小正确,我需要更新滚动位置,因此我不得不将其延迟到viewDidAppear。这并不是一个很好的用户体验,在它出现之后就会跳跃。

有什么方法可以在生命周期的早期知道键盘的高度和宽度,这样我就可以在元素对用户可见之前设置它们的大小了吗?

我正在使用XIB创建使用自动布局的键盘界面。这就是我将它添加到键盘的方式:

let keyboardNib = UINib(nibName: "KeyboardView", bundle: nil)
let keyboardInterface = keyboardNib.instantiateWithOwner(self, options: nil)[0] as! UIView

keyboardInterface.setTranslatesAutoresizingMaskIntoConstraints(false)

self.inputView.addSubview(keyboardInterface)

let verticalConstraints: [NSLayoutConstraint] = NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[keyboardInterface]-0-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["keyboardInterface": keyboardInterface, "view": view]) as! [NSLayoutConstraint]
let horizontalConstraints: [NSLayoutConstraint] = NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[keyboardInterface]-0-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["keyboardInterface": keyboardInterface]) as! [NSLayoutConstraint]

self.inputView.addConstraints(verticalConstraints)
self.inputView.addConstraints(horizontalConstraints)

0 个答案:

没有答案