我有一个带有UITabBarController作为根视图控制器的基本应用程序。当该应用的用户未登录时,我的window!.rootViewController!.present(viewController, animated: true)
中将通过AppDelegate
显示一个模式控制器。在所有iPhone机型上都能正常工作,但是在所有iPad上都会发生以下情况:
在过渡期间,SignInController的背景颜色可见。现在出现了奇怪的事情:当我在Interface Builder中将视图更改为iPad时,错误消失了:
将背景色更改回透明默认值至少会删除白色背景,但是视图仍从左下角移动,这是我不想要的。顺便说一句,在Interface Builder中更改视图会破坏所有iPhone上的动画。将其改回即可解决,但会再次损坏所有iPad。
这是代码(使用ReSwift进行状态管理):
func newState(state: State) {
switch (previousState.session, state.session) {
case (.loading, .notSignedIn), (.signedIn, .loading):
(window!.rootViewController! as! UITabBarController).selectedIndex = 0
let viewController = storyboard.instantiateViewController(withIdentifier: "SignInViewController")
window!.rootViewController!.present(viewController, animated: true, completion: nil)
default:
// more stuff
break
}
}
编辑:添加了实际代码。
答案 0 :(得分:0)
我修复了!
问题是在提供的控制器的keyboardWillShowNotification
方法中,becomeFirstResponder
上有一个观察者和一个viewWillAppear
上了。
将becomeFirstResponder
移至viewDidAppear
可以解决所有问题!
答案 1 :(得分:0)
谢谢大佬!拯救了我的一天..我在一个 tableview 单元格中展示键盘 - 我是这样修复的:
private var canPresentKeyboard: Bool = false
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
canPresentKeyboard = true
if _currentlySelectedIdType != .image {
reload(section: .idType)
}
}
func configure(cell: NumberIdTableViewCellInput) {
cell.set(delegate: self)
if canPresentKeyboard {
cell.clearAndSetFirstResponder()
}
}
我知道代码有点断章取义,但我相信意图很明确。