2016-03-04 63 views
1

好傢伙自定義單元格我花了幾天找出如何解決我的問題,我沒有太多的熟練迅速,我決定問一些profesionals動態地插入次數與動態高度

我的問題:

DATA :事件數列表(apointment,任務等...) 其事件數量並不總是相同多數民衆贊成我爲什麼必須插入儘可能多的意見作爲事件陣列和每個單元格的高度總是不同

自定義單元格用xib文件創建

enter image description here

我在單元格中插入視圖(創建apointments和任務列),但當滾動所有內容開始看起來非常糟糕時,我遇到問題。有人可以幫助我,並告訴我爲什麼它看起來像滾動時破碎的樂高?

我想讓這樣的事情enter image description here

我試圖添加標籤,我的意見欄的左側,並沒有工作。細胞高度小,內容沒有出現,因爲被隱藏在下一行。細胞高度只是那個標記的高度。它忽略了最後一個視圖和標籤

只通知約束的約束的ViewController

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

var data = [PLCalendarDay]() 

var tableView : UITableView! 

let days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"] 


override func viewDidLoad() { 
    super.viewDidLoad() 
    for (var i = 0; i<5; i++) { 
     var boleen = true 
     if i > 2 {boleen = false} 
     let calendar = NSCalendar.currentCalendar() 
     let day = calendar.dateByAddingUnit(.Day, value: i, toDate: NSDate(), options: []) 
     print("robim pole") 
     self.data.append(PLCalendarDay(day: day!, withEnd: boleen)) 
    } 
    tableView = UITableView() 
    tableView.registerNib(UINib(nibName: "PLCalendarCell", bundle: nil), forCellReuseIdentifier: "PLCalendarCellid") 
    tableView.rowHeight = UITableViewAutomaticDimension 
    tableView.estimatedRowHeight = 200 
    tableView.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height) 
    tableView.delegate = self 
    tableView.dataSource = self 
    tableView.separatorStyle = .None 
    self.view.addSubview(tableView!) 

    // Do any additional setup after loading the view, typically from a nib. 
} 

override func viewDidAppear(animated: Bool) { 
    //  self.tableView.reloadSections(NSIndexSet(indexesInRange: NSMakeRange(0, self.tableView.numberOfSections)), withRowAnimation: .None) 
} 



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

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    print("davam cell number") 
    return data.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    print("davam cell") 
    let cell = tableView.dequeueReusableCellWithIdentifier("PLCalendarCellid", forIndexPath: indexPath) as! PLCalendarCell 
    cell.setupCell(data[indexPath.row].events) 
    //cell.selectionStyle = .None 
    //  cell.day.text = data[indexPath.row].date.dateStringWithFormat("dd") 
    //  let day = data[indexPath.row].date.dateStringWithFormat("dd-MM-yyyy") 
    //  cell.dayWord.text = days[getDayOfWeek(day)!-1] 
    print("som awake1 1 1 ") 
    return cell 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    // cell selected code here 
} 

func getDayOfWeek(today:String)->Int? { 

    let formatter = NSDateFormatter() 
    formatter.dateFormat = "dd-MM-yyyy" 
    if let todayDate = formatter.dateFromString(today) { 
     let myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
     let myComponents = myCalendar.components(.Weekday, fromDate: todayDate) 
     let weekDay = myComponents.weekday 
     return weekDay 
    } else { 
     return nil 
    } 
} 

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return 200 
} 

}

細胞文件

class PLCalendarCell: UITableViewCell { 



@IBOutlet weak var day: UILabel! 
@IBOutlet weak var dayWord: UILabel! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    print("som awake") 
    // Initialization code 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
    super.init(style: style, reuseIdentifier: reuseIdentifier) 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 

func setupCell (events: [PLCalendarEvent]){ 
    let cellWidht = self.contentView.frame.width 
    var positionY:CGFloat = 10.0 
    var lastView: UIView? = nil 

    for event in events { 

     if event.end != nil { 

      let view = PLCalendarCellView(frame: CGRectMake(70, positionY, cellWidht, 50.0), time: true) 
      view.title.text = event.desc 
      view.time.text = "\(event.start.dateStringWithFormat("dd-MM-yyyy")) - \(event.end!.dateStringWithFormat("dd-MM-yyyy"))" 
      view.backgroundColor = UIColor.greenColor() 
      view.layer.cornerRadius = 4 
      self.addSubview(view) 
      if lastView == nil { 
       let constrain = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.TopMargin, multiplier: 1, constant: 10) 
       self.addConstraint(constrain) 
      } else { 
       let constrain = NSLayoutConstraint(item: lastView!, attribute: NSLayoutAttribute.BottomMargin, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 10) 
       self.addConstraint(constrain) 
      } 
      lastView = view 
      positionY += 60.0 

     } 
     else { 

      let view = PLCalendarCellView(frame: CGRectMake(70, positionY, cellWidht, 30.0), time: false) 
      view.title.text = event.desc 
      view.backgroundColor = UIColor.greenColor() 
      view.layer.cornerRadius = 4 
      self.addSubview(view) 
      if lastView == nil { 
       let constrain = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.TopMargin, multiplier: 1, constant: 10) 
       self.addConstraint(constrain) 
      } else { 
       let constrain = NSLayoutConstraint(item: lastView!, attribute: NSLayoutAttribute.BottomMargin, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 10) 
       self.addConstraint(constrain) 
      } 
      lastView = view 
      positionY += 40.0 

     } 
    } 

    //  eventHolderView.frame = CGRectMake(0, 0, cellWidht, positionY) 

    //  let constrain = NSLayoutConstraint(item: self.contentView, attribute: NSLayoutAttribute.BottomMargin, relatedBy: NSLayoutRelation.Equal, toItem: lastView, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 10) 
    //  self.addConstraint(constrain) 
    let constrain = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.BottomMargin, relatedBy: NSLayoutRelation.Equal, toItem: lastView, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 10) 
    self.addConstraint(constrain) 

} 

}

卡倫德日

class PLCalendarDay: NSObject { 
let date: NSDate! 
var events = [PLCalendarEvent]() 

init(day: NSDate, withEnd: Bool) { 

    self.date = NSCalendar.currentCalendar().startOfDayForDate(day) 

    if withEnd { 

     for(var i=0; i<5;i++){ 
      events.append(PLCalendarEvent(description: "Only one day", startDate: NSCalendar.currentCalendar().startOfDayForDate(date))) 
     } 

    } else { 

     for(var i=0; i<5;i++){ 
      events.append(PLCalendarEvent(description: "Only one day", startDate: NSCalendar.currentCalendar().startOfDayForDate(date), endDate: date)) 
     } 

    } 

} 

}

卡倫德事件

class PLCalendarEvent : NSObject{ 

let desc: String 
let start: NSDate 
var end: NSDate? = nil 

init(description: String, startDate: NSDate) { 
    self.desc = description 
    self.start = startDate 
} 

init(description: String, startDate: NSDate, endDate: NSDate) { 
    self.desc = description 
    self.start = startDate 
    self.end = endDate 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

}

我真的不能達到任何好的結果,我會幫忙真的很感謝

回答

0

我解決了這個問題。我所需要的只是適當的約束,但不僅是垂直的,而且是水平的。