iOS 11 Swift 下的 UITabBar 转换问题

Posted

技术标签:

【中文标题】iOS 11 Swift 下的 UITabBar 转换问题【英文标题】:UITabBar Transition Issue Below iOS 11 Swift 【发布时间】:2018-05-11 13:53:20 【问题描述】:

我在 ios 9 中遇到了这个过渡问题,我在下面附上了一个 GIF。

看起来自定义 textView 在 segue 之前假定标签栏顶部的 x 轴,然后稳定到其原始位置。

不过,iOS 11 没有问题,但 iOS 10 也一样。

我还怀疑这可能是由push segue 引起的,因为它可以很好地与其他类型的 segue 转换(没有任何高度稳定故障)。

我正在使用自动布局。评论textView 固定在superView 的底部。任何提示将不胜感激。

这是在推送时关闭 UITabBar 的代码。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "previewVC" 
        let destinationController = segue.destination as! PostViewController
        destinationController.hidesBottomBarWhenPushed = true
    

【问题讨论】:

这是一个适合我的全栈解决方案:***.com/a/46510833/4427884 我自己搭建的完整解决方案:github.com/29satnam/InputAccessoryView 【参考方案1】:

尝试其他解决方案。

使用您的文本作为UIViewController 的输入附件视图,因此从情节提要中删除该底部视图

在你的视图控制器中添加关注

var viewAcc: UIView?
var sendButton: UIButton!
var inputTextField: UITextField!

override var inputAccessoryView: UIView? 
    return viewAcc


override var canBecomeFirstResponder: Bool 
    return true

在查看是否加载方法添加以下代码 注意:请根据您的要求更改约束

    viewAcc = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 44))
    viewAcc?.backgroundColor = UIColor.white
    inputTextField = UITextField (frame: CGRect(x:8, y:0, width:UIScreen.main.bounds.width, height: 44 ))
    inputTextField.inputAccessoryView = nil
    inputTextField.delegate = self as? UITextFieldDelegate
    inputTextField.placeholder = "Enter message..."
    viewAcc?.backgroundColor = .white
    viewAcc?.addSubview(inputTextField);

    let topBorderView = UIView()
    topBorderView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
    viewAcc?.addSubview(topBorderView)
    viewAcc?.addConstraintsWithFormat(format: "H:|[v0]|", views: topBorderView)
    viewAcc?.addConstraintsWithFormat(format: "V:|[v0(0.5)]", views: topBorderView)

    sendButton = UIButton(type: .system)
    sendButton.isEnabled = true
    sendButton.titleLabel?.font = UIFont.systemFont(ofSize: 16)
    sendButton.setTitle("Send", for: .normal)
    sendButton.contentEdgeInsets = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
    sendButton.addTarget(self, action: #selector(handleSend), for: .touchUpInside)
    viewAcc?.addSubview(sendButton)

    inputTextField.translatesAutoresizingMaskIntoConstraints = false
    sendButton.translatesAutoresizingMaskIntoConstraints = false
    viewAcc?.addConstraint(NSLayoutConstraint(item: inputTextField, attribute: .left, relatedBy: .equal, toItem: viewAcc, attribute: .left, multiplier: 1, constant: 8))
    viewAcc?.addConstraint(NSLayoutConstraint(item: inputTextField, attribute: .top, relatedBy: .equal, toItem: viewAcc, attribute: .top, multiplier: 1, constant: 7.5))
    viewAcc?.addConstraint(NSLayoutConstraint(item: inputTextField, attribute: .right, relatedBy: .equal, toItem: sendButton, attribute: .left, multiplier: 1, constant: -2))
    viewAcc?.addConstraint(NSLayoutConstraint(item: inputTextField, attribute: .bottom, relatedBy: .equal, toItem: viewAcc, attribute: .bottom, multiplier: 1, constant: -8))
    viewAcc?.addConstraint(NSLayoutConstraint(item: sendButton, attribute: .right, relatedBy: .equal, toItem: viewAcc, attribute: .right, multiplier: 1, constant: 0))
    viewAcc?.addConstraint(NSLayoutConstraint(item: sendButton, attribute: .bottom, relatedBy: .equal, toItem: viewAcc, attribute: .bottom, multiplier: 1, constant: -4.5))

由于您的文本视图不是视图控制器的子视图,因此它将按预期工作

编辑 IPHONE X 支持

lazy var viewAcc: SafeAreaInputAccessoryViewWrapperView = 
    return SafeAreaInputAccessoryViewWrapperView(for: button)
()

希望对你有帮助

【讨论】:

这不是解决方案。但是,该评论视图是 github.com/KennethTsang/GrowingTextView 的子类,从 storyboard 中删除它会破坏整个设置。 @SatnamSync 您也可以通过编程方式创建该文本视图 当然可以创建。两种方法之间没有太大区别。如果您能准确地提及解决方案,将不胜感激。 @SatnamSync 那么你只需要在 inputTextField 的地方使用Growing Textview 对象 你有类似的实现吗?可以分享一下代码吗?

以上是关于iOS 11 Swift 下的 UITabBar 转换问题的主要内容,如果未能解决你的问题,请参考以下文章

Swift iOS UITabBar 自定义

自动布局忽略iOS7上的UITabBar(栏下的内容)

iOS 8、iOS 9、iOS 10 和 iOS 11 上的 UITabBar 的高度是多少?

iOS 11 中的横向 UITabBar 中的 UITabBarItem

UITabbar 在 iOS 10 但不是 11+

UITabBar 项目位置问题 Xamarin