在自动调整大小的标签中的不同行上显示 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 字符串数组的主要内容,如果未能解决你的问题,请参考以下文章
自动调整 uitableviewcell 的大小 - SWIFT