使用Xcode 8 beta的自定义键盘故事板

时间:2016-08-26 14:51:25

标签: storyboard swift3 custom-keyboard ios10 xcode8-beta6

我在Xcode 8 beta 6的故事板中设计我的自定义键盘时遇到了一些问题 出于某种原因,当我在iOS 10设备上启动键盘时,结果如下: enter image description here

这就是我在故事板,顶视图中设计它的方式:
enter image description here

底视图:enter image description here

所以它只显示底部视图的高度。
我对iOS 9没有这个问题。
对于出了什么问题的任何想法?

更新
这就是键盘在iOS 9中加载的方式:
enter image description here

更新2:
甚至以这种方式在 viewDidLoad()中以编程方式创建视图也不起作用:

self.view.backgroundColor = UIColor.orange

let bottomView = UIView()

bottomView.backgroundColor = UIColor.blue

self.view.addSubview(bottomView)

bottomView.translatesAutoresizingMaskIntoConstraints = false

let trailing = bottomView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
let leading = bottomView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor)
let bottom = bottomView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -50)
let top = bottomView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 0)

NSLayoutConstraint.activate([trailing, leading, bottom, top])

我写了苹果虫报告 希望从他们那里得到消息

2 个答案:

答案 0 :(得分:2)

我有同样的问题。我假设您没有在绿色块上设置高度,因为您希望它填满键盘的剩余空间。如果你想让键盘成为一个CONSTANT高度,你只需在绿色块上设置一个高度约束就可以了,但由于屏幕尺寸和方向的原因,你可能不需要一个高度。

在iOS 9中,自定义键盘的默认大小与系统键盘相同。因此,如果您在iOS 9中运行此功能,绿色块会根据这些尺寸填充剩余空间。在iOS 10中由于某种原因没有默认高度,并且因为你的绿色块没有高度约束,所以它认为高度为零。

要修复它,您需要设置键盘的高度。这是我写的处理它的代码(到目前为止一直很好)。将它放在ViewDidLoad之前的keyboardviewcontroller类中,你应该好好去:

//***************************

//create constraint variable before function
var constraint = NSLayoutConstraint()

//function to set height
func setKeyboardHeight () {
    let screenSize = UIScreen.mainScreen().bounds.size
    let screenH = screenSize.height;

    self.view.removeConstraint(constraint)

    //you can set the values below as needed for your keyboard
    if screenH >= 768 {
        //for iPad landscape or portrait
        self.constraint = NSLayoutConstraint(item: self.view, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0.0, constant: 300.0)
        self.view.addConstraint(self.constraint)

    } else if screenH >= 414 {
        //for iPhone portrait AND iPhone Plus landscape or portrait
        self.constraint = NSLayoutConstraint(item: self.view, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0.0, constant: 220.0)
        self.view.addConstraint(self.constraint)

    } else {
        //for iPhone landscape
        self.constraint = NSLayoutConstraint(item: self.view, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0.0, constant: 140.0)
        self.view.addConstraint(self.constraint)
    }
}

//sets height when keyboard loads
override func updateViewConstraints() {
    super.updateViewConstraints()
    // Add custom view sizing constraints here
    setKeyboardHeight()
}

//sets or changes height when device rotates
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    setKeyboardHeight()
}

//***************************

答案 1 :(得分:0)

如果我错过了关于这个问题的事情,请告诉我。如果需要其他信息,请使用评论,我将更新答案。

如果您希望扩展底部视图,我认为您可能希望降低topview的内容压缩阻力优先级。如果你想在topView和bottomView之间保持比例间距,你的问题就不清楚了。

您可以在模拟器或设备上运行该应用程序,然后打开查看调试并尝试查看topView发生的情况。它很可能是零大小或隐藏在一些意想不到的观点背后。在视图调试中,您要单击视图以查看其轮廓。还有一个选项可以查看约束,以便您可以以意外的方式确定哪个约束可能会影响视图。