呈现视图控制器时出现奇怪的错误

时间:2018-10-04 16:40:00

标签: ios iphone swift ipad

我有一个带有UITabBarController作为根视图控制器的基本应用程序。当该应用的用户未登录时,我的window!.rootViewController!.present(viewController, animated: true)中将通过AppDelegate显示一个模式控制器。在所有iPhone机型上都能正常工作,但是在所有iPad上都会发生以下情况:

broken

在过渡期间,SignInController的背景颜色可见。现在出现了奇怪的事情:当我在Interface Builder中将视图更改为iPad时,错误消失了:

working

将背景色更改回透明默认值至少会删除白色背景,但是视图仍从左下角移动,这是我不想要的。顺便说一句,在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
  }
}

编辑:添加了实际代码。

2 个答案:

答案 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()
    }
}

我知道代码有点断章取义,但我相信意图很明确。