gpt4 book ai didi

swift - 在我的 collectionview Controller 中添加一个 UIView header

转载 作者:搜寻专家 更新时间:2023-11-01 06:36:06 24 4
gpt4 key购买 nike

我正在尝试将此标签 View 添加到我的具有单元格和标题的集合 Controller 中。但是,在我运行它之后没有添加任何东西。我本可以使用 Storyboard创建这些标签,但我想知道如何在没有 Storyboard的情况下做到这一点。请帮忙,非常感谢!

 var dayLabelContainerView : UIView {

let v = UIView()
let formatter : NSDateFormatter = NSDateFormatter()
for index in 1...7 {

let day = formatter.weekdaySymbols[index % 7] as NSString
let weekdayLabel = UILabel()
weekdayLabel.text = day.substringToIndex(2).uppercaseString
weekdayLabel.textColor = UIColor.grayColor()
weekdayLabel.textAlignment = NSTextAlignment.Center
v.addSubview(weekdayLabel)

}

self.addSubview(v)
return v
}

更新: Collection View 代码:

// 
// DaysViewController.swift
// Calendar
//
// Created by guiyang Fan on 12/29/16.
// Copyright © 2016 guiyang Fan. All rights reserved.
//

import UIKit

private let reuseIdentifier = "Cell"
private let headerHeight: CGFloat = 100


class DaysViewController: UICollectionViewController {



private let weekdaySymbols = DateFormatter().shortWeekdaySymbols
private let dateFormatter = DateFormatter()
private let calendar = NSCalendar.current
private var currentDate: Date = Date()
private let specificDate = NSDateComponents()

fileprivate let sectionInsets = UIEdgeInsets(top: 50.0, left: 0, bottom : 50.0, right: 20.0)
var monthInfo : [Int:[Int]] = [Int:[Int]]()

private var weekdayOffset: Int {
get{
var components = calendar.dateComponents([.year, .month, .day], from: currentDate)
components.day = 1
components.month = 2
let startOfMonth = calendar.date(from: components)
return self.calendar.component(.weekday, from: startOfMonth!)

}

}



override func viewDidLoad() {
super.viewDidLoad()


// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false

// Register cell classes


// Do any additional setup after loading the view.
collectionView?.backgroundColor = UIColor.white

//collectionView?.register(headerView.self, forCellWithReuseIdentifier:"headerId" )
//collectionView?.register(<#T##nib: UINib?##UINib?#>, forSupplementaryViewOfKind: <#T##String#>, withReuseIdentifier: <#T##String#>)

// setupMenuBar()
}

var dayLabel : UIView {
let v = UIView()
let formatter: DateFormatter = DateFormatter()
for index in 1...7 {
let day = formatter.shortWeekdaySymbols[index] as NSString
let weekdayLabel = UILabel()
weekdayLabel.text = day as String
weekdayLabel.textAlignment = NSTextAlignment.center
v.addSubview(weekdayLabel)

}

view.addSubview(v)
return v



}








/*
let menu: MenuBar = {
let mb = MenuBar()
return mb

}()

private func setupMenuBar(){
view.addSubview(menu)
let views = ["menu" : menu]

let horizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-20-[menu]|",options: [], metrics: nil, views: views)

let verticalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "V:|-20-[menu(50)]",options: [], metrics: nil, views: views)

view.addConstraints(horizontalConstraints)
view.addConstraints(verticalConstraints)

}
*/


override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/

// MARK: UICollectionViewDataSource

override func numberOfSections(in collectionView: UICollectionView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}


override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of items

//let range = calendar.range(of: .day, in: .month, for:currentDate)!


//return range.count

return 42
}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! DaysViewCell

// Configure the cell

//let currentMonthInfo : [Int] = monthInfo[indexPath.section]!
/*
let fdIndex = currentMonthInfo[FIRST_DAY_INDEX]
let nDays = currentMonthInfo[NUMBER_DAYS_INDEX]
let fromStartOfMonthIndexPath = NSIndexPath(forItem: IndexPath.item - fdIndex, inSection: indexPath.section)

if indexPath.item
*/
var components = calendar.dateComponents([.day, .month, .year], from: currentDate)
components.month = 2
let date = calendar.date(from: components)!
let range = calendar.range(of: .day, in: .month, for:date)!

//let range = calendar.range(of: .day, in: .month, for:currentDate)!

print(range.count)

cell.backgroundColor = UIColor.white

if isValidDayCell(indexPath: indexPath as NSIndexPath) && indexPath.item < weekdayOffset + range.count
{

//print(weekdayOffset)
//var dayToDisplay = indexPath.row - weekdayOffset
cell.DaysCell.text = String(indexPath.item + 1 - weekdayOffset)

}

else
{
cell.DaysCell.text = ""

}
return cell
}


private let headerIdentifier = "headerId"

override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
{
let header = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: headerIdentifier, for: indexPath) as! headerView

//header.title.text = "calendar"

dateFormatter.locale = NSLocale.current

dateFormatter.dateStyle = .full

//var convertedDate = dateFormatter.string(from: currentDate)

var components = calendar.dateComponents([.day, .month, .year], from: currentDate)
components.month = 2
let monthName = DateFormatter().monthSymbols[components.month! - 1]


//header.updateMonthHeader(text: String(components.month!))

header.updateMonthHeader(text: monthName)
//header.backgroundColor = UIColor.black

return header

}






func isValidDayCell(indexPath: NSIndexPath) -> Bool {

return indexPath.row >= weekdayOffset

}



fileprivate let itemsPerRow: CGFloat = 10






// MARK: UICollectionViewDelegate

/*
// Uncomment this method to specify if the specified item should be highlighted during tracking
override func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool {
return true
}
*/

/*
// Uncomment this method to specify if the specified item should be selected
override func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
return true
}
*/

/*
// Uncomment these methods to specify if an action menu should be displayed for the specified item, and react to actions performed on the item
override func collectionView(_ collectionView: UICollectionView, shouldShowMenuForItemAt indexPath: IndexPath) -> Bool {
return false
}

override func collectionView(_ collectionView: UICollectionView, canPerformAction action: Selector, forItemAt indexPath: IndexPath, withSender sender: Any?) -> Bool {
return false
}

override func collectionView(_ collectionView: UICollectionView, performAction action: Selector, forItemAt indexPath: IndexPath, withSender sender: Any?) {

}
*/

}

extension DaysViewController : UICollectionViewDelegateFlowLayout {

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

let widthPerItem = view.frame.width / itemsPerRow

return CGSize(width: widthPerItem, height: widthPerItem)

}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets{
return sectionInsets
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 20

}


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
if collectionView.dataSource != nil {
let size = CGSize(width: view.frame.width, height: headerHeight)
return size
}
else
{
return CGSize(dictionaryRepresentation: 0 as! CFDictionary)!
}



}



}

最佳答案

您还没有为 UIView 添加任何尺寸

UIView(frame: CGRect(x:  WHATEVER , y:  WHATEVER, width: WHATEVER , height: WHATEVER))

所以代替

let v = UIView()

应该是

let v = UIView(frame: CGRect(x:  WHATEVER , y:  WHATEVER, width: WHATEVER , height: WHATEVER))

正如 NiravD 添加的那样,您还应该定义 UILabel 框架

关于swift - 在我的 collectionview Controller 中添加一个 UIView header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41476458/

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