gpt4 book ai didi

iOS,带有 Collection View 的自定义键盘,约束问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:56:40 24 4
gpt4 key购买 nike

我正在尝试为 iOS 创建一个自定义键盘,其中包括一个带有图像的 Collection View 。目前我正在尝试没有 Storyboard( Storyboard有几个问题并且不容易描述)。所以我只是添加“nextKeyboardButton”(在 XCode 上添加新目标时默认出现),然后添加另一个按钮(切换 UICollectionViewCell 上的图标类型,最后是 UICollectionView.

我的代码:

class KeyboardViewController: UIInputViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {

@IBOutlet var nextKeyboardButton: UIButton!
@IBOutlet var switchTypedButton: UIButton!

var isEmoji: Bool! = true;
var collectionView: UICollectionView!

override func viewDidLoad() {
super.viewDidLoad()

// Collection View
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.scrollDirection = UICollectionViewScrollDirection.horizontal
layout.sectionInset = UIEdgeInsets(top: 10, left: 10, bottom: 30, right: 10)
layout.itemSize = CGSize(width: 50, height: 50)

collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
collectionView.dataSource = self
collectionView.delegate = self
collectionView.register(IconViewCell.self, forCellWithReuseIdentifier: "Cell")
collectionView.backgroundColor = UIColor.white
collectionView.showsHorizontalScrollIndicator = false

self.view.addSubview(collectionView)


// Perform custom UI setup here
self.nextKeyboardButton = UIButton(type: .system)
self.nextKeyboardButton.setTitle(NSLocalizedString("ABC", comment: "Title for 'Next Keyboard' button"), for: [])
self.nextKeyboardButton.sizeToFit()
self.nextKeyboardButton.translatesAutoresizingMaskIntoConstraints = false
self.nextKeyboardButton.addTarget(self, action: #selector(handleInputModeList(from:with:)), for: .allTouchEvents)

self.view.addSubview(self.nextKeyboardButton)

// Perform custom UI setup here
self.switchTypedButton = UIButton(type: .system)
self.switchTypedButton.setTitle("View Gifs", for: [])
self.switchTypedButton.sizeToFit()
self.switchTypedButton.translatesAutoresizingMaskIntoConstraints = false
self.switchTypedButton.addTarget(self, action: #selector(self.switchTypedFunction), for: .touchUpInside)

self.view.addSubview(self.switchTypedButton)

self.nextKeyboardButton.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 10).isActive = true
self.nextKeyboardButton.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true

self.switchTypedButton.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: -10).isActive = true
self.switchTypedButton.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true

self.collectionView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
self.collectionView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
self.collectionView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
self.collectionView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
}
}

我得到的错误是:

Probably at least one of the constraints in the following list is one you don't want. 
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x174097c00 h=--& v=--& UICollectionView:0x11000aa00.height == 0 (active)>",
"<NSLayoutConstraint:0x174097430 V:|-(0)-[UICollectionView:0x11000aa00] (active, names: '|':UIInputView:0x10fe00990 )>",
"<NSLayoutConstraint:0x1740974d0 UICollectionView:0x11000aa00.bottom == UIInputView:0x10fe00990.bottom (active)>", <<<<<<<------- ERROR
"<NSLayoutConstraint:0x174097930 'UIView-Encapsulated-Layout-Height' UIInputView:0x10fe00990.height == 667 (active)>"
)

所以我可以看到错误可能在 UICollectionView:0x11000aa00.bottom == UIInputView:0x10fe00990.bottom 但我不明白为什么这是错误的并且导致它失败。

附言。在模拟器中它可以正常工作,但在 iPhone 6S 中却不行。

最佳答案

在将 collectionView 作为 subview 添加到 View 之前添加此行:


collectionView.translatesAutoresizingMaskIntoConstraints = false
以便删除自动调整大小的约束

和 addSubview 之后的这一行:
self.view.addConstraint(NSLayoutConstraint(item: self.collectionView, attribute: .height, relatedBy: .equal, toItem: self.view, attribute: .height, multiplier: 1.0, constant: 0.0))

以便指定 Collection View 的高度。否则它会塌陷到零高度。

关于iOS,带有 Collection View 的自定义键盘,约束问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40113114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com