在自动调整大小的标签中的不同行上显示 Swift 字符串数组

Posted

技术标签:

【中文标题】在自动调整大小的标签中的不同行上显示 Swift 字符串数组【英文标题】:Display Swift array of strings on separate lines in auto resized label 【发布时间】:2015-09-15 09:17:04 【问题描述】:

我有一个通过 FMDB SQLite 结果填充的 Swift 字符串数组。数组将 OK 打印到控制台窗口。我现在不想打印到控制台,而是希望数组中的字符串显示在自动调整大小标签 (tests_label) 中的单独行上。

仅比 XCode 新手略少,感谢您的耐心等待!

import UIKit

class ViewController: UIViewController 


    @IBOutlet weak var tests_label: UILabel!

    var databasePath = NSString()

    override func viewDidLoad() 
        super.viewDidLoad()

        let filemgr = NSFileManager.defaultManager()

        let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)

        let docsDir = dirPaths[0] as! String

        databasePath = docsDir.stringByAppendingPathComponent("vmd_db.db")

        let myDatabase = FMDatabase(path: databasePath as String)

        if myDatabase.open()

            var arrayData:[String] = []

            let query_lab_test = "SELECT lab_test FROM lab_test"

            let results_lab_test:FMResultSet? = myDatabase.executeQuery(query_lab_test, withArgumentsInArray: nil)

            while results_lab_test?.next() == true 

                if let resultString = results_lab_test?.stringForColumn("lab_test")

                arrayData.append(resultString)

            
        
            var multiLineString = join("\u0085", arrayData)
            tests_label.text = multiLineString
            tests_label.numberOfLines = 0
            tests_label.lineBreakMode = NSLineBreakMode.ByWordWrapping
            tests_label.sizeToFit()
            //println(arrayData)
            myDatabase.close()
    
    


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

【问题讨论】:

【参考方案1】:

您可以创建一个由换行符分隔的字符串,如下所示:

let string = array.joinWithSeparator("\u0085")

或者在 Swift 4 中:

let string = array.joined(separator: "\u0085")

然后将其分配给标签。对于UILabel,您可能应该将numberOfLines 设置为零并使用sizeToFit() 或更复杂的方式调整其大小。

【讨论】:

@Adam...谢谢,但我使用的是 XCode 6.4,我认为 joinWithSeperator 在该版本中不可用。我尝试加入但得到一个错误:'无法使用'(String)'类型的参数列表调用'加入'【参考方案2】:

我最终使用了 TextView 小部件...非常适合可缩放列表:

import UIKit

class ViewController: UIViewController 


    @IBOutlet weak var tests_scroller: UITextView!

    var databasePath = NSString()

    override func viewDidLoad() 
        super.viewDidLoad()

        let filemgr = NSFileManager.defaultManager()

        let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)

        let docsDir = dirPaths[0] as! String

        databasePath = docsDir.stringByAppendingPathComponent("vmd_db.db")

        let myDatabase = FMDatabase(path: databasePath as String)

        if myDatabase.open()

            var arrayData:[String] = []

            let query_lab_test = "SELECT lab_test FROM lab_test ORDER BY lab_test ASC"

            let results_lab_test:FMResultSet? = myDatabase.executeQuery(query_lab_test, withArgumentsInArray: nil)

            while results_lab_test?.next() == true 

                if let resultString = results_lab_test?.stringForColumn("lab_test")

                arrayData.append(resultString)

            
        
            var multiLineString = join("\n", arrayData)
            tests_scroller.text = multiLineString
            myDatabase.close()
    
    


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

【讨论】:

以上是关于在自动调整大小的标签中的不同行上显示 Swift 字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局时标签不会调整大小,情节提要中的约束

Swift 3 - 调整字体大小以适应宽度,多行

Swift 3 Button 文本自动调整大小

自动调整 uitableviewcell 的大小 - SWIFT

js table中的td中有三个span标签,如果能在IE浏览器实现同行显示?请大家帮帮忙

iOS 有时会自动调整单元格标签的大小