2016-03-08 71 views
1

我想要选择的字符串和UIStackView使用UILabel s显示它们,但我遇到问题与他们不显示他们的文字在我的应用程序。我创建了以下游乐场:游乐场视图输出只显示黑色视图

import UIKit 
import XCPlayground 

let standardFrame = CGRect(x: 0, y: 0, width: 320, height: 480) 
let stackView = UIStackView(frame: standardFrame) 
stackView.backgroundColor = UIColor.blueColor() 

let strings = ["Hello world", "Guten Tag", "Buenos Dias"] 

strings.map { str in 
    let newLabel = UILabel() 
    newLabel.text = str 
    return newLabel 
}.forEach(stackView.addArrangedSubview) 

XCPlaygroundPage.currentPage.liveView = stackView 

在辅助视图中,我看到一个带有预期大小的黑框,而不是带有文本的蓝色。

回答

2

UIStackView不会直接绘制到屏幕上,它只是为其排列的子视图设置约束,并使这些子视图直接绘制到屏幕上。它的背景颜色被忽略,因为它没有将自己绘制到屏幕上。要获得背景颜色,可以将其添加为UIView的子视图。

此外,文本标签需要将其颜色设置为非黑色,因为无法看到黑色背景上呈现的黑色文本。下面的代码应该在蓝色背景上创建一个漂亮的UIStackView白色文本。

import UIKit 
import XCPlayground 

let standardFrame = CGRect(x: 0, y: 0, width: 320, height: 480) 
let rootView = UIView(frame: standardFrame) 
rootView.backgroundColor = UIColor.blueColor() 

let stackView = UIStackView(frame: standardFrame) 
stackView.distribution = .EqualSpacing 
stackView.alignment = .Center 

let strings = ["Hello world", "Guten Tag", "Buenos Dias"] 

strings.map { str in 
    let newLabel = UILabel() 
    newLabel.textColor = UIColor.whiteColor() 
    newLabel.text = str 
    return newLabel 
    }.forEach(stackView.addArrangedSubview) 

rootView.addSubview(stackView) 
XCPlaygroundPage.currentPage.liveView = rootView