我正在尝试为iOS创建一个自定义键盘,其中包括带图像的集合视图。目前我正在尝试没有故事板(故事板有几个问题,并不容易描述)。所以我只是添加" 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中。
答案 0 :(得分:0)
您是否将collectionView的translatesAutoresizingMaskIntoConstraints设置为false?我注意到你为nextKeyboardButton做了。
我记得前一段时间看过Apple(?)文档说如果你看到NSAutoresizingMaskLayoutConstraint
列出了错误,请检查掩码是否已关闭。
答案 1 :(得分:0)
在将collectionView作为子视图添加到视图之前添加此行:
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))
以便指定集合视图的高度。否则它将折叠到零高度。