Bja*_*rte 5 swift ios9 uistackview
我通过UIStackView编程方式添加了一些Axis应用程序,当应用程序处于运行状态时,我希望它们具有其他功能Regular Width and Any Height。
就像在界面生成器中一样,这是否有可能?
我在Google遇到的只是willTransitionToTraitCollection,但不是我所需要的。
为了更容易理解我的需求:
for i in numberOfItems {
let stackView = UIStackView()
stackView.append... // add views in this new stack view
// here is where I need help:
stackView.axis = horizontal
stackView.addSomething... stackView.axis = vertical if regular width and any height.
existingStackView.append.... stackView
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我找到了另一种方法,但是在iPhone 6+上旋转时,出现了一些奇怪的现象。Git回购:https : //github.com/bjaskj/iOSStackViewConstraints
class MyStackView: UIStackView {
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.horizontalSizeClass == UIUserInterfaceSizeClass.Regular {
axis = UILayoutConstraintAxis.Horizontal
} else {
axis = UILayoutConstraintAxis.Vertical
}
}
}
Run Code Online (Sandbox Code Playgroud)
ViewController:
@IBOutlet weak var mainStackView: UIStackView!
override func viewDidLoad() {
super.viewDidLoad()
addElement("Name", description: "Saint Petersburg")
addElement("Native name", description: "?????-?????????")
addElement("Country", description: "Russia")
addElement("Federal district", description: "Northwestern")
addElement("Economic region", description: "Northwestern")
addElement("Established", description: "May 27, 1703")
}
func addElement(title:String, description:String) {
let labelTitle = UILabel()
labelTitle.backgroundColor = UIColor.redColor()
labelTitle.font = UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline)
labelTitle.text = title
labelTitle.textColor = UIColor.whiteColor()
let labelDescription = UILabel()
labelDescription.backgroundColor = UIColor.blueColor()
labelDescription.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)
labelDescription.text = description
labelDescription.textColor = UIColor.whiteColor()
let stackHolder = MyStackView()
stackHolder.axis = .Vertical
stackHolder.distribution = .FillEqually
stackHolder.addArrangedSubview(labelTitle)
stackHolder.addArrangedSubview(labelDescription)
stackHolder.spacing = 8
mainStackView.addArrangedSubview(stackHolder)
}
Run Code Online (Sandbox Code Playgroud)
更新:
好的,看来您有两个问题:
1)当我将stackviews添加到场景中时,如何根据大小类添加适当的stackview.axis:
for i in numberOFItems {
let stackView = UIStackView()
if view.traitCollection.verticalSizeClass == .Unspecified && view.traitCollection.horizontalSizeClass == .Regular {
stackView.axis = .Vertical
} else {
stackView.axis = .Horizonal
}
stackView.addArrangedSubview(arrayOfViews[i])
}
Run Code Online (Sandbox Code Playgroud)
2)如何在更改手机方向时使stackview从水平轴更改为垂直轴:
您将需要拥有一个已初始化的堆栈视图数组。然后,您需要在委托方法中单步执行stackview并更改其方向。
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
var axis
if view.traitCollection.verticalSizeClass == .Compact {
axis = UILayoutConstraintAxis.Horizontal
} else {
axis = UILayoutConstraintAxis.Vertical
}
for stackView in stackViewArray {
stackView.axis = axis
}
}
Run Code Online (Sandbox Code Playgroud)
该视图具有一个traitCollection,其中包括verticalSizeClass和horizontalSizeClass。这些可以具有.Compact,.Regular和.Unspecified的值。
每当修改尺寸类别时(即,当手机被打开时),traittraitDidChange方法应告诉您。
如果仍然无法回答您的问题,请尝试重写您的问题,以便于理解
另外,我无法知道一次设置这些属性并完成操作,您必须同时处理这两种情况。
| 归档时间: |
|
| 查看次数: |
4741 次 |
| 最近记录: |