这是我一直无法解决的非常奇怪的问题。
我将此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
}
}
UICollectionViewCell
(DownloadUrlCell
)的容器内部有一个UITextField
,该单元格的所有代码都没有。
现在,当我点击文本字段时,视图将按键盘的高度向上移动。 我尚未添加任何代码来切换视图。我不知道为什么会这样,并且在堆栈上或其他任何地方都找不到任何类似的问题。 我没有使用任何第三方库。
Edit1 :好的,我上传了一个具有相同问题的演示项目。该文本字段位于第三个单元格(名为:DownloadUrlCell)中。以下是github项目的链接:
https://github.com/AfnanAhmadiOSDev/VDProjectDemo.git
Edit2 :因此,在尝试了一些其他操作之后,我得出的结论是,问题仅存在于UICollectionViewCell
中。如果我将文本字段添加到任何UIViewController
中,则可以正常工作,没有问题,但是如果我将文本字段添加到UICollectionViewCell
内,然后点击该文本字段,则视图会向上移动。
下面是一个带有UICollectionViewController
和一个简单单元格的简单项目。项目中没有其他东西,但问题仍然存在。
https://github.com/AfnanAhmadiOSDev/VDSimpleDemo
Edit3 :因此,在四处寻找之后,我发现这个答案确实有所帮助。但是原因尚不清楚。
答案 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
}
}
您的结果将是: