Xcode 8 beta 的自定义键盘故事板
Custom Keyboard Storyboard with Xcode 8 beta
我在从 Xcode 8 beta 6 中的故事板设计自定义键盘时遇到了一些问题。
出于某种原因,当我在 iOS 10 设备上启动键盘时,结果如下:
这就是我在情节提要中设计它的方式,顶视图:
底视图:
所以它只显示底部视图的高度。
我没有这个问题 iOS 9.
关于出了什么问题的任何想法?
更新:
这就是键盘在 iOS 9:
中的加载方式
更新 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])
我写信给 apple 错误报告。
希望能得到他们的消息
如果我遗漏了有关此问题的任何信息,请告诉我。如果需要其他信息,请使用评论,我会更新答案。
我认为如果您希望扩展底部视图,您可能需要降低顶部视图的内容压缩阻力优先级。如果您想保持 topView 和 bottomView 之间的比例间距,您的问题中并不清楚。
您可以运行模拟器或设备上的应用程序,然后打开视图调试并尝试找出topView 发生了什么。它的大小很可能为零或隐藏在某些意想不到的视图后面。在视图调试中,您想要单击视图以查看它的轮廓。还有一个查看约束的选项,以便您可以确定哪个可能以意想不到的方式影响视图。
我遇到了同样的问题。我假设您没有在绿色块上设置高度,因为您希望它填满键盘的剩余 space。如果您希望键盘的高度保持不变,您只需在绿色块上设置一个高度限制即可,但由于屏幕尺寸和方向的原因,您可能不希望所有东西都具有一个高度。
在 iOS9 中,自定义键盘的默认大小与系统键盘相同。因此,如果您在 iOS 9 中 运行 这个,绿色块会根据这些维度填充剩余的 space。在 iOS 10 中,出于某种原因没有默认高度,并且由于您的绿色块没有高度限制,它认为高度为零。
要修复它,您需要为键盘设置高度。这是我为处理它而编写的代码(到目前为止还不错)。将它放在 keyboardviewcontroller class 之前的 ViewDidLoad 中,你应该可以开始了:
//***************************
//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()
}
//***************************
我在从 Xcode 8 beta 6 中的故事板设计自定义键盘时遇到了一些问题。
出于某种原因,当我在 iOS 10 设备上启动键盘时,结果如下:
这就是我在情节提要中设计它的方式,顶视图:
底视图:
所以它只显示底部视图的高度。
我没有这个问题 iOS 9.
关于出了什么问题的任何想法?
更新:
这就是键盘在 iOS 9:
中的加载方式
更新 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])
我写信给 apple 错误报告。
希望能得到他们的消息
如果我遗漏了有关此问题的任何信息,请告诉我。如果需要其他信息,请使用评论,我会更新答案。
我认为如果您希望扩展底部视图,您可能需要降低顶部视图的内容压缩阻力优先级。如果您想保持 topView 和 bottomView 之间的比例间距,您的问题中并不清楚。
您可以运行模拟器或设备上的应用程序,然后打开视图调试并尝试找出topView 发生了什么。它的大小很可能为零或隐藏在某些意想不到的视图后面。在视图调试中,您想要单击视图以查看它的轮廓。还有一个查看约束的选项,以便您可以确定哪个可能以意想不到的方式影响视图。
我遇到了同样的问题。我假设您没有在绿色块上设置高度,因为您希望它填满键盘的剩余 space。如果您希望键盘的高度保持不变,您只需在绿色块上设置一个高度限制即可,但由于屏幕尺寸和方向的原因,您可能不希望所有东西都具有一个高度。
在 iOS9 中,自定义键盘的默认大小与系统键盘相同。因此,如果您在 iOS 9 中 运行 这个,绿色块会根据这些维度填充剩余的 space。在 iOS 10 中,出于某种原因没有默认高度,并且由于您的绿色块没有高度限制,它认为高度为零。
要修复它,您需要为键盘设置高度。这是我为处理它而编写的代码(到目前为止还不错)。将它放在 keyboardviewcontroller class 之前的 ViewDidLoad 中,你应该可以开始了:
//***************************
//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()
}
//***************************