轻按文本框并显示键盘时,视图将上移,即使没有代码可将视图向上移动

时间:2019-02-19 06:18:26

标签: swift uicollectionview uitextfield

这是我一直无法解决的非常奇怪的问题。 我将此UICollectionViewCell命名为DownloadUrlCell,并具有以下一些属性:

class DownloadUrlCell: UICollectionViewCell {

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = .gray
        setupCellView()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    //MARK: properties
    let container: UIView = {
        let vi = UIView()
        vi.translatesAutoresizingMaskIntoConstraints = false
        vi.backgroundColor = .white
        vi.layer.cornerRadius = 5.0
        vi.addShadowToSelf()
        return vi
    }()

    let urlInputTF: UITextField = {
        let tf = UITextField()
        tf.translatesAutoresizingMaskIntoConstraints = false
        tf.borderStyle = .roundedRect
        tf.textColor = .black
        tf.font = UIFont.systemFont(ofSize: 13)
        return tf
    }()

    //MARK: setup methods
    func setupCellView() {
        setupContainer()
        addUrlTFAndBtn()
    }

    func setupContainer() {
        self.addSubview(container)

        container.topAnchor.constraint(equalTo: self.topAnchor, constant: 10).isActive = true
        container.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -10).isActive = true
        container.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 5).isActive = true
        container.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -5).isActive = true
    }

    func addUrlTFAndBtn() {
        //urlInputTF.delegate = self
        container.addSubview(urlInputTF)

        urlInputTF.topAnchor.constraint(equalTo: container.topAnchor, constant: 0).isActive = true
        urlInputTF.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 0).isActive = true
        urlInputTF.trailingAnchor.constraint(equalTo: container.leadingAnchor, constant: 0).isActive = true
        urlInputTF.heightAnchor.constraint(equalToConstant: 40).isActive = true
    }
}

UICollectionViewCellDownloadUrlCell)的容器内部有一个UITextField,该单元格的所有代码都没有。

现在,当我点击文本字段时,视图将按键盘的高度向上移动。 我尚未添加任何代码来切换视图。我不知道为什么会这样,并且在堆栈上或其他任何地方都找不到任何类似的问题。 我没有使用任何第三方库

Edit1 :好的,我上传了一个具有相同问题的演示项目。该文本字段位于第三个单元格(名为:DownloadUrlCell)中。以下是github项目的链接:

https://github.com/AfnanAhmadiOSDev/VDProjectDemo.git

Edit2 :因此,在尝试了一些其他操作之后,我得出的结论是,问题仅存在于UICollectionViewCell中。如果我将文本字段添加到任何UIViewController中,则可以正常工作,没有问题,但是如果我将文本字段添加到UICollectionViewCell内,然后点击该文本字段,则视图会向上移动。

下面是一个带有UICollectionViewController和一个简单单元格的简单项目。项目中没有其他东西,但问题仍然存在。

https://github.com/AfnanAhmadiOSDev/VDSimpleDemo

Edit3 :因此,在四处寻找之后,我发现这个答案确实有所帮助。但是原因尚不清楚。

解决方案:https://stackoverflow.com/a/51980844/10758374

2 个答案:

答案 0 :(得分:0)

对于iOS 11,可以关闭这种类型的滚动行为。

setupCollectionView()方法中添加以下代码以解决您的问题。

    func setupCollectionView(){

        ....
        ....

        if #available(iOS 11.0, *) {
            self.collectionView?.contentInsetAdjustmentBehavior = .never
        } else {
            automaticallyAdjustsScrollViewInsets = false
        }
    }

我希望这会对您有所帮助。

答案 1 :(得分:0)

它不起作用,因为您必须在setupCollectionView()中添加这两行

func setupCollectionView(){
    self.collectionView?.backgroundColor = .gray
    self.collectionView?.isPagingEnabled = true
    self.collectionView?.register(HomeCell.self, forCellWithReuseIdentifier: "homecellid")
    self.collectionView?.register(VideoListCell.self, forCellWithReuseIdentifier: "secondcellid")
    self.collectionView?.register(DownloadUrlCell.self, forCellWithReuseIdentifier: "DownloadUrlCellid")
    self.collectionView?.register(FourthCell.self, forCellWithReuseIdentifier: "FourthCellid")
    self.collectionView?.contentInset = UIEdgeInsetsMake(65, 0, 0, 0)
    self.collectionView?.bounces = false
    self.collectionView?.showsHorizontalScrollIndicator = false
    self.collectionView?.showsVerticalScrollIndicator = false
    if #available(iOS 11.0, *) {
        self.collectionView?.contentInsetAdjustmentBehavior = .never
    } else {
        automaticallyAdjustsScrollViewInsets = false
    }
}

您的结果将是:

enter image description here