gpt4 book ai didi

ios - Apple Swift 教程 : Rating buttons layout

转载 作者:行者123 更新时间:2023-11-30 13:16:43 25 4
gpt4 key购买 nike

我目前正在学习 Apple 的 iOS Swift 初学者教程,该教程解释了如何创建评级星级 View ,但我对布局代码不太了解。为了布局他们使用 for-in 循环从代码创建的评级按钮,他们创建了另一种方法:

override func layoutSubviews() {
var buttonFrame = CGRect(x: 0, y: 0, width: 44, height: 44)

// Offset each button's origin by the length of the button plus spacing.
for (index, button) in ratingButtons.enumerate() {
buttonFrame.origin.x = CGFloat(index * (44 + 5))
button.frame = buttonFrame
}
}

但是在按钮初始化时:

for _ in 0..<5 {
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
button.backgroundColor = UIColor.redColor()
// Add event listener
button.addTarget(self, action: #selector(RatingControl.rateButtonTapped(_:)), forControlEvents: .TouchDown)
ratingButtons += [button]

addSubview(button)
}

他们不能简单地调整代码,而不是在 for-in 循环中使用通配符 (_),而是使用索引并执行类似的操作吗? :

for i in 0..<5 {
let button = UIButton(frame: CGRect(x: (i * 49), y: 0, width: 44, height: 44))
button.backgroundColor = UIColor.redColor()
// Add event listener
button.addTarget(self, action: #selector(RatingControl.rateButtonTapped(_:)), forControlEvents: .TouchDown)
ratingButtons += [button]

addSubview(button)
}

我正在学习 Swift,但我不明白为什么他们重​​写layoutSubviews 方法而不是在初始化时这样做。请告诉我哪条路更干净。这是教程链接:https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson5.html

问候,

最佳答案

问题是在调用 viewWillLayoutSubviews 方法之前,包含矩形的框架是未知的。在此方法之后调用 layoutSubviews 方法,并且每次为 View 调用 layoutIfNeeded 时。

这意味着布局可以适应 View 中的更新,并且只能从一种方法调用。

一种方法是否比另一种方法更简洁是主观的,实际上取决于每个人来确定,但至少您应该以遵循 View 生命周期的方式编写 UI 代码。

关于ios - Apple Swift 教程 : Rating buttons layout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38149114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com