你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS7技巧 >> Swift tableView只有1個Label標簽單元格高度自適應

Swift tableView只有1個Label標簽單元格高度自適應

編輯:IOS7技巧
tableView自適應我們以前有給各位介紹過了,今天我們來看一篇關於tableView只有1個Label標簽單元格高度自適應例子吧,具體的細節步驟如下文介紹.

1,單元格高度自適應

有時我們使用表格(UITableView)顯示列表數據。不希望每個單元格的高度是固定的,最好能根據單元格中的內容來自適應高度。在過去,我們如果想在表格視圖中展示可變高度的動態內容,需要手動計算行高,比較麻煩。
自 iOS8 起,UITableView 加入了一項新功能:Self Sizing Cells。設置後表格會自動計算單元格的尺寸並渲染,大大節省了開發時間。

2,使用Self Sizing Cells的條件

(1)單元格 Cell 需要使用 Auto Layout 約束。
(2)需要指定 tableView 的 estimatedRowHeight 屬性默認值。
(2)將 tableView 的 rowHeight 屬性設置為 UITableViewAutomaticDimension。

3,樣例效果圖

下面先通過一個最簡單的樣例演示如何使用 Self Sizing Cells。單元格就是最原始的 UITableViewCell,即裡面只有一個文


4,樣例代碼

這裡注意我們要將單元格 label 的 numberOfLines 屬性設為0(默認是1)。這樣就可以允許標簽自動增長。


import UIKit
 
class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource {
    
    var catalog = [[String]]()
    var tableView:UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //初始化列表數據
        catalog.append(["第一節:Swift 環境搭建",
            "由於Swift開發環境需要在OS X系統中運行,下面就一起來學習一下swift開發環境的搭建方法。"])
        catalog.append(["第二節:Swift 基本語法",
            "本節介紹Swift中一些常用的關鍵字。以及引入、注釋等相關操作。"])
        catalog.append(["第三節: Swift 數據類型",
            "Swift 提供了非常豐富的數據類型,比如:Int、UInt、浮點數、布爾值、字符串、字符等等。"])
        catalog.append(["第四節: Swift 變量",
            "Swift 每個變量都指定了特定的類型,該類型決定了變量占用內存的大小。"])
        catalog.append(["第五節: Swift 可選(Optionals)類型",
            "Swift 的可選(Optional)類型,用於處理值缺失的情況。"])
 
        //創建表視圖
        self.tableView = UITableView(frame: self.view.frame, style:UITableViewStyle.Plain)
        self.tableView.delegate = self
        self.tableView.dataSource = self
        //創建一個重用的單元格
        self.tableView.registerClass(UITableViewCell.self,
                                      forCellReuseIdentifier: "SwiftCell")
        
        //設置estimatedRowHeight屬性默認值
        self.tableView.estimatedRowHeight = 44.0;
        //rowHeight屬性設置為UITableViewAutomaticDimension
        self.tableView.rowHeight = UITableViewAutomaticDimension;
        
        self.view.addSubview(self.tableView!)
    }
    
    
    //在本例中,只有一個分區
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1;
    }
    
    //返回表格行數(也就是返回控件數)
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.catalog.count
    }
    
    //創建各單元顯示內容(創建參數indexPath指定的單元)
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
        -> UITableViewCell
    {
        //為了提供表格顯示性能,已創建完成的單元需重復使用
        let identify:String = "SwiftCell"
        //同一形式的單元格重復使用,在聲明時已注冊
        let cell = tableView.dequeueReusableCellWithIdentifier(identify,
                                    forIndexPath: indexPath) as UITableViewCell
        //獲取對應的條目內容
        let entry = catalog[indexPath.row]
        //允許標簽自動增長
        cell.textLabel?.numberOfLines = 0
        cell.textLabel?.text = "\(entry[0]): \(entry[1])"
        return cell
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

5,功能改進

前面樣例中,每節標題和內容簡介都放一起不太美觀。下面通過 textLabel 的 attributedText 屬性來設置具有樣式屬性的字符串。讓標題文字加粗並有顏色,而內容簡介另起一行開始顯示。

import UIKit
 
class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource {
    
    var catalog = [[String]]()
    var tableView:UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //初始化列表數據
        catalog.append(["第一節:Swift 環境搭建",
            "由於Swift開發環境需要在OS X系統中運行,下面就一起來學習一下swift開發環境的搭建方法。"])
        catalog.append(["第二節:Swift 基本語法",
            "本節介紹Swift中一些常用的關鍵字。以及引入、注釋等相關操作。"])
        catalog.append(["第三節: Swift 數據類型",
            "Swift 提供了非常豐富的數據類型,比如:Int、UInt、浮點數、布爾值、字符串、字符等等。"])
        catalog.append(["第四節: Swift 變量",
            "Swift 每個變量都指定了特定的類型,該類型決定了變量占用內存的大小。"])
        catalog.append(["第五節: Swift 可選(Optionals)類型",
            "Swift 的可選(Optional)類型,用於處理值缺失的情況。"])
 
        //創建表視圖
        self.tableView = UITableView(frame: self.view.frame, style:UITableViewStyle.Plain)
        self.tableView.delegate = self
        self.tableView.dataSource = self
        //創建一個重用的單元格
        self.tableView.registerClass(UITableViewCell.self,
                                      forCellReuseIdentifier: "SwiftCell")
        
        //設置estimatedRowHeight屬性默認值
        self.tableView.estimatedRowHeight = 44.0;
        //rowHeight屬性設置為UITableViewAutomaticDimension
        self.tableView.rowHeight = UITableViewAutomaticDimension;
        
        self.view.addSubview(self.tableView!)
    }
    
    
    //在本例中,只有一個分區
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1;
    }
    
    //返回表格行數(也就是返回控件數)
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.catalog.count
    }
    
    //創建各單元顯示內容(創建參數indexPath指定的單元)
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
        -> UITableViewCell
    {
        //為了提供表格顯示性能,已創建完成的單元需重復使用
        let identify:String = "SwiftCell"
        //同一形式的單元格重復使用,在聲明時已注冊
        let cell = tableView.dequeueReusableCellWithIdentifier(identify,
                                    forIndexPath: indexPath) as UITableViewCell
        //獲取對應的條目內容
        let entry = catalog[indexPath.row]
        //允許標簽自動增長
        cell.textLabel?.numberOfLines = 0
        //使用屬性文本
        cell.textLabel?.attributedText = getAttributedString(title: entry[0],
                                                             subtitle: entry[1])
        return cell
    }
    
    //獲取條目屬性文本
    func getAttributedString(title title: String, subtitle: String) -> NSAttributedString {
        //標題字體樣式
        let titleFont = UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline)
        let titleColor = UIColor(red: 45/255, green: 153/255, blue: 0/255, alpha: 1)
        let titleAttributes = [NSFontAttributeName: titleFont,
                               NSForegroundColorAttributeName: titleColor]
        //簡介字體樣式
        let subtitleFont = UIFont.preferredFontForTextStyle(UIFontTextStyleSubheadline)
        let subtitleAttributes = [NSFontAttributeName: subtitleFont]
        //拼接並獲取最終文本
        let titleString = NSMutableAttributedString(string: "\(title)\n",
                                                    attributes: titleAttributes)
        let subtitleString = NSAttributedString(string: subtitle,
                                                attributes: subtitleAttributes)
        titleString.appendAttributedString(subtitleString)
        return titleString
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved