1

我想像这样使用 UIViewController 的输入附件视图:

override func canBecomeFirstResponder() -> Bool {
    return true
}

override var inputAccessoryView: UIView! {
    return self.bar
}

但问题是我有一个类似视图的抽屉,当我滑动视图打开时,输入视图停留在窗口上。如何像 Slack 那样将输入视图保持在中心视图上。

在此处输入图像描述

我的输入视图位于底部,占据全屏(红色是下图中的输入视图):

在此处输入图像描述

4

1 回答 1

0

有两种方法可以做到这一点,就像 Slack 一样,Meiwin在这里有一篇中等帖子A Stickler for Details:Implementing Sticky Input Field in iOS来展示他是如何做到这一点的,他实际上把一个空UIView的作为inputAccessoryView然后跟踪它的坐标在屏幕上知道将他的自定义视图与空视图相关的位置,如果您要SplitViewController在 iPad 上支持,这种方式会很有帮助,但如果您对这种方式不感兴趣,您可以看看我是如何做到的喜欢这张图片

这是刷卡之前

这是之后

实际上,我所做的只是从inputAccessoryView窗口拍摄快照并将其NavigationController放在TableViewController

我正在使用Jon Kent的SideMenu,使用UISideMenuNavigationControllerDelegate

var isInputAccessoryViewEnabled = true {
    didSet {
        self.inputAccessoryView?.isHidden = !self.isInputAccessoryViewEnabled
        if self.isInputAccessoryViewEnabled {self.becomeFirstResponder()}
    }
}

func sideMenuWillAppear(menu: UISideMenuNavigationController, animated: Bool) {
    let inputWindow = UIApplication.shared.windows.filter({$0.className == "UITextEffectsWindow"}).first
    self.inputAccessoryViewSnapShot = inputWindow?.snapshotView(afterScreenUpdates: false)
    if let snapShotView = self.inputAccessoryViewSnapShot, let navView = self.navigationController?.view {
        navView.addSubview(snapShotView)
    }

    self.isInputAccessoryViewEnabled = false
}

func sideMenuDidDisappear(menu: UISideMenuNavigationController, animated: Bool) {
    self.inputAccessoryViewSnapShot?.removeFromSuperview()        
    self.isInputAccessoryViewEnabled = true
}

我希望这会有所帮助:)

于 2018-10-17T11:18:06.693 回答