iMessageグループチャットで見られるように、ナビゲーションバー内にコレクションビューを配置しようとしています。 。iMessageグループチャットのようにナビゲーションバーにコレクションビューを配置する方法
私は答えがhereであり、iOS10/Swift 3に変換するのに最善を尽くしましたが、コレクションビューのセルが正しくナビゲーションバーに表示されません。
import UIKit
weak var collectionView: UICollectionView?
class ChatController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
override func viewDidLoad() {
super.viewDidLoad()
let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(300), height: CGFloat(80)), collectionViewLayout: layout)
collectionView.backgroundColor = UIColor.clear
navigationItem.titleView? = collectionView
collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "cell")
collectionView.delegate? = self
collectionView.dataSource? = self
view.addSubview(collectionView)
collectionView.reloadData()
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = (collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath))
cell.backgroundColor = UIColor.orange
cell.layer.cornerRadius = 24
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: CGFloat(50), height: CGFloat(50))
}
}
とナビゲーションバークラス:ここに私のコードです
import Foundation
import UIKit
class NavigationBar: UINavigationBar {
var chatController: ChatController?
override func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: CGFloat(self.superview!.bounds.size.width), height: CGFloat(80))
}
func setFrame(frame: CGRect) {
var f = frame
f.size.height = 80
super.frame = f
}
}
それは、ビューの細胞が現れているのコレクションのように見えますが、彼らは代わりに内部のナビゲーションバーの下にしている(下記参照画像)。ナビゲーションバーを非表示にすると、セルはビューの一番上に表示されますが、ナビゲーションバー内に表示されます。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = UINavigationController(rootViewController: ChatController())
return true
}
私はこのプログラムで(何のストーリーボードを)やってないよ:私はここで初心者のミスを作ってるんだ場合
はここで、必ずアプリデリゲートの私のUIのコードではありません。誰かが私が間違っているのを見ることができますか?ここで
'viewDidLoad'の最後の呼び出しとして' view.addSubview(collectionView)collectionView.reloadData() 'を呼び出します。ナビゲーションバーを追加するコードを投稿します。 – shallowThought
ありがとう、私はサブビューを追加するのを忘れました..残念ながらそれはそれを修正しません!まだプレーンビューのコントローラ/ナビゲーションバーです。 – KingTim
ChatControllerの追加方法を表示します。 – shallowThought