I am trying to create a custom keyboard for iOS which includes a collection view with images. Currently I am trying without a storyboard(had several issues with the storyboard and it is not easy to describe). So I am just adding the "nextKeyboardButton" (comes by default when adding the new target on XCode), then added another button (switches the icon types on the UICollectionViewCell
and finally the UICollectionView
.
My code:
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
}
}
The error I am getting is:
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)>"
)
So I can see that the error is probably at UICollectionView:0x11000aa00.bottom == UIInputView:0x10fe00990.bottom
but I cannot understand why this is wrong and it is making it fail.
Ps. In the simulator it is working find but it does not in an iPhone 6S.