gpt4 book ai didi

ios - 比例高度值取自 xib 文件而不是设备

转载 作者:行者123 更新时间:2023-11-28 07:55:31 30 4
gpt4 key购买 nike

第一次遇到这种奇怪的问题。我有一个 UIViewController我用它创建的是XIB文件。屏幕有两个 View viewA 和 viewB。 viewA 具有这些值 top = 0 , leading = 0 , trailing = 0 . viewA.height = safeArea.height/2 . viewB 约束是 top = 0 , leading = 0 , trailing = 0 , bottom = 0 . viewA里面我有一个 view名为 viewAbackgroundtop = 0 , leading = 0 , trailing = 0 , bottom = 0对其容器 ( viewA ) 的约束,我也有一些 labelsviewA .我用这个viewAbackground添加 gradient因为如果我直接将它添加到 viewA它出现在标签的前面。这是我添加渐变的方式:

func createGradientLayer(theView: UIView) {
let gradientLayer = CAGradientLayer()
gradientLayer.frame = theView.frame
gradientLayer.startPoint = CGPoint(x: 0.5, y: 1.0)
gradientLayer.endPoint = CGPoint(x: 0.5, y: 0.0)
gradientLayer.colors = [UIColor(hexString: Colors.startColor)?.cgColor, UIColor(hexString: Colors.endColor)?.cgColor]
//add the gradient to the view
theView.layer.addSublayer(gradientLayer)
}

然后在 viewDidLoad 中调用 createGradientLayer(theView: viewA)

gradient添加但问题是它不一样 sizeviewA .经过几个小时试图了解问题所在后,我发现应用了 size值与 device 相同我在 interface Builder 中选择在view as而不是我的设备屏幕的值。例如:如果在 xib我在 view as iPhone SE ,当我在 iPhone 6 中运行时我得到 gradient大小为 viewAiPhone SE .我有Xcode 9.2,我正在使用 Swift 4

谁能解释一下为什么我遇到这个尺寸问题?

编辑更多信息:这是 View 的层次结构。 ScrollView <- MainView <- viewA and viewB . mainView高度等于安全区域的高度。 scrollView 的实用程序适用于 iPhone 4 等小型设备。在这种情况下,我给 mainView定义的高度值以获得滚动效果。

最佳答案

当您的 View 从 xib 或 Storyboard加载时,布局将与加载的内容相匹配。正如您所注意到的,这不一定与运行它的设备相同。

因此在 viewDidLoad 中,您将从数据中加载大小。

在第一次调用 viewWillAppear 时,您会看到相同的尺寸。

viewDidLayoutSubviews 每次 View 的边界发生变化时都会被调用。这将是第一次有机会按照您对正在运行的设备的预期进行布局。

不过要小心,因为您不想在每次调用此方法时都添加渐变。但是,如果尺寸可能因设备旋转而发生变化,您可能需要更新它。

更新因为您使用的是 ScrollView ,viewDidLayoutSubviews 可能不会报告正确的值。可能是 SDK 中的错误。您可以尝试从 viewDidAppear 获取正确的值,或者如果为时已晚,请尝试以下解决方案。

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.setNeedsLayout()
scrollView.layoutIfNeeded()
createGradientLayer(theView: viewA)
}

关于ios - 比例高度值取自 xib 文件而不是设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48210395/

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