【问题标题】:Weird bug when presenting a view controller呈现视图控制器时出现奇怪的错误
【发布时间】:2019-03-10 03:21:54
【问题描述】:

我有一个以 UITabBarController 作为根视图控制器的基本应用程序。当应用程序的用户未登录时,我通过window!.rootViewController!.present(viewController, animated: true) 在我的AppDelegate 中显示模态控制器。这适用于所有 iPhone 型号,但在任何 iPad 上都会发生以下情况:

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

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

编辑:添加实际代码。

【问题讨论】:

  • “当应用程序的用户未登录时,我将显示一个模态控制器”问题是何时您正在这样做。显示您的实际代码。

标签: ios iphone swift ipad


【解决方案1】:

我修好了! ?

问题是在提供的控制器的viewWillAppear 方法中拥有keyboardWillShowNotification 上的观察者和becomeFirstResponder 的组合。

becomeFirstResponder 移动到viewDidAppear 解决了所有问题!

【讨论】:

    【解决方案2】:

    谢谢大佬!节省了我的一天..我在 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()
        }
    }
    
    

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

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多