gpt4 book ai didi

ios - 在 UIStackView 中设置 anchor 和位置

转载 作者:行者123 更新时间:2023-11-30 12:02:54 25 4
gpt4 key购买 nike

我有 1 UIView添加到UIStackView通过 Interface Builder(为了演示)。我需要在其原点转换此 subview ,因此我设置 layer.anchorPointlayer.positionCGPoint(0, 0) 。当 View 出现时,该图层将移动到新的 anchorPoint ,但位于其原始位置 CGPoint(0.5, 0.5).就好像我没有设置layer.position完全没有。

相反,我尝试将相同的 subview 添加到另一个 UIView没有堆栈 View ,并且它按预期重新调整。这是设置 subview 的 anchorPoint 的结果和layer.position :

let background = UIView(frame: CGRect(x: 0, y: 0, width: 265, height: 55))
background.backgroundColor = UIColor.blue
PlaygroundPage.current.liveView = background

let stackView = UIStackView(frame: background.bounds)
background.addSubview(stackView)

let subview = UIView()
subview.backgroundColor = .red
stackView.addArrangedSubview(subview)

enter image description here

现在,当我设置anchorPoint时和position在将 subview 添加到堆栈 View 之前,仅 anchorPoint受到尊重:

// same
let background = UIView(frame: CGRect(x: 0, y: 0, width: 265, height: 55))
background.backgroundColor = UIColor.blue
PlaygroundPage.current.liveView = background

// same
let stackView = UIStackView(frame: background.bounds)
background.addSubview(stackView)

let subview = UIView()
subview.backgroundColor = .red
subview.layer.anchorPoint = CGPoint(x: 0, y: 0) // added
subview.layer.position = CGPoint(x: 0, y: 0) // added
stackView.addArrangedSubview(subview)

print(subview.layer.position) // (132.5, 27.5)

enter image description here

我希望它看起来与第一张图片相同。

是否有隐含的UIStackView覆盖 subview 层的 position 的约束? IRL 我正在使用带有自动布局的 Interface Builder(我认为这并不重要,因为自 iOS 8 以来自动布局一直是转换友好的),并重置 positionviewDidLayoutSubviews()仍然不可靠,因为 subview 的 frameposition直到 viewDidAppear 为止都是正确的被调用,此时 subview顽固地重新定位为 stackView 认为合适的位置。

如何设置 View 的 anchorPointlayer.positionUIStackView

最佳答案

anchor 可以正常工作,因为默认值为中心(0.5,0.5),设置 (0,0) 相对于位置的平均偏移一半。

如果你想改变内部 View 的位置,因为 UIStack 会自动调整位置,将其填满,所以改变位置对 View 没有影响
或者,你可以使用变换来改变位置:

subview.transform = CGAffineTransform(translationX: 100, y: 100)  

或添加到现有变换(默认为无变换矩阵)

subview.transform = subview.transform.translatedBy(x: 100, y: 100)

上面的代码意味着它移动了位置(100,100)

您还可以将其旋转(例如向左 50 度)

subview.transform = subview.transform.rotated(by: 50)

或放大:

subview.transform = subview.transform.scaledBy(x: 1.5, y: 1.2)

关于ios - 在 UIStackView 中设置 anchor 和位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46995489/

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