2016-08-16 6 views
2

私はCollapsed TableViewを作成しました。 tableViewのラベルのサイズは、コンテンツに応じて増加していません。私はWordWrapとLines = 0を設定しましたが、まだ動作していません。 2つのtableViewセルを使用して折りたたみビューを作成しています。内容に応じたTableViewのtextLabelの高さ

extension UIView { 
func rotate(toValue: CGFloat, duration: CFTimeInterval = 0.2, completionDelegate: AnyObject? = nil) { 
    let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation") 
    rotateAnimation.toValue = toValue 
    rotateAnimation.duration = duration 
    rotateAnimation.removedOnCompletion = false 
    rotateAnimation.fillMode = kCAFillModeForwards 

    if let delegate: AnyObject = completionDelegate { 
     rotateAnimation.delegate = delegate 
    } 
    self.layer.addAnimation(rotateAnimation, forKey: nil) 
} 
} 

class CollapsibleTableViewController: UITableViewController { 
struct Section { 
    var name: String! 
    var items: [String]! 
    var collapsed: Bool! 

    init(name: String, items: [String], collapsed: Bool = false) { 
     self.name = name 
     self.items = items 
     self.collapsed = collapsed 
    } 
} 

var sections = [Section]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    sections = [Section(name: "TEXT OVER HERE", items: ["TEXT OVER HERE."])] 
} 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return sections.count 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return (sections[section].collapsed!) ? 0 : sections[section].items.count 
} 

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let header = tableView.dequeueReusableCellWithIdentifier("header") as! CollapsibleTableViewHeader 

    header.toggleButton.tag = section 
    header.titleLabel.text = sections[section].name 
    header.toggleButton.rotate(sections[section].collapsed! ? 0.0 : CGFloat(M_PI_2)) 
    header.toggleButton.addTarget(self, action: #selector(CollapsibleTableViewController.toggleCollapse), forControlEvents: .TouchUpInside) 

    return header.contentView 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell! 

    cell.textLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping 
    cell.textLabel?.numberOfLines = 0 
    cell.textLabel?.text = sections[indexPath.section].items[indexPath.row] 



    return cell 
} 

// 
// MARK: - Event Handlers 
// 
func toggleCollapse(sender: UIButton) { 
    let section = sender.tag 
    let collapsed = sections[section].collapsed 

    // Toggle collapse 
    sections[section].collapsed = !collapsed 

    // Reload section 
    tableView.reloadSections(NSIndexSet(index: section), withRowAnimation: .Automatic) 
} 

} 

enter image description here

+0

あなたは –

+0

はい、私が使用しているプロジェクトで自動レイアウトや自動サイズ変更を使用していますAutoLayoutではなくLabelのものです。私はFirstCell(つまりヘッダー)のボタンで折り畳みを表示しています。 2番目のセルは完全に空白です。 – Nitesh

+0

このhttps://www.hackingwithswift.com/read/32/2/automatically-resizing-uitableviewcells-with-dynamic-type-and-ns –

答えて

0

このコードを試してみてください。

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 

    var lblSectionName: UILabel = UILabel() 
    lblSectionName.text = self.sectionNames[section] 
    lblSectionName.numberOfLines = 0 
    lblSectionName.lineBreakMode = .ByWordWrapping 
    lblSectionName.sizeToFit() 
    return lblSectionName.frame.size.height 
} 

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    var lblSectionName: UILabel = UILabel() 
    lblSectionName.text = self.sectionNames[section] 
    lblSectionName.numberOfLines = 0 
    lblSectionName.lineBreakMode = .ByWordWrapping 
    lblSectionName.sizeToFit() 
    return lblSectionName 
} 
+0

私はAnbu.Karthikのコメントを読んだ後でそれを試しましたが、それ以降はCollapsedセルのtextLabelの高さが固定されています。ヘッダーtextLabelの高さはそのままです。 – Nitesh

+0

編集したコードも正しく動作しません。 – Nitesh

関連する問題