iOS:自动布局的问题。模拟器结果随着情节提要的变化而变化
Posted
技术标签:
【中文标题】iOS:自动布局的问题。模拟器结果随着情节提要的变化而变化【英文标题】:iOS: A Issue with Auto Layout. Simulator Result Changes As Storyboard Changes 【发布时间】:2017-12-16 00:17:38 【问题描述】:我正在制作我的第一个 ios 应用。我遇到了自动布局和滚动视图的问题。所以现在我在主故事板上有一个滚动视图。滚动视图应该占据整个屏幕。我还有其他三个 xib 文件。每一个都是滚动视图中的一个页面。所以我可以实现类似可滚动演练的东西。我现在的问题是。如果我改变主情节提要的大小,我从模拟器得到的结果会有所不同。
此外,当应用程序加载时,它不会立即在屏幕上显示我拥有的内容。它只会显示纯黑色背景。我需要先在屏幕上滚动,然后所有的文字、图像都会显示出来。我也不确定出了什么问题。我的主故事板没有背景颜色。这可能与上述问题有关吗?
第一个问题的一些例子,如果我将我的主故事板更改为 iPhone Plus 大小。模拟器将显示 iPhone Plus 设备的正确尺寸,但不适用于普通 iPhone 和 iPhone X。如下图所示。
如果我将故事板更改为常规 iPhone 尺寸。 iPhone 8 将显示正确的尺寸,但 plus 和 X 将关闭。
这就是我为滚动视图设置约束的方式。
这就是我在代码中设置单个 xib 和滚动视图的方式。
override func viewDidLoad()
super.viewDidLoad()
//Set up individual view for scroll view
let xOrigin = self.view.frame.width
creditScreen = CreditScreenView(nibName: "CreditScreenView", bundle: nil)
mainScroll.addSubview(creditScreen.view)
forWeather = ForcastScreenView(nibName: "ForcastScreenView", bundle: nil)
mainScroll.addSubview(forWeather.view)
nowWeather = NowScreenView(nibName: "NowScreenView", bundle: nil)
mainScroll.addSubview(nowWeather.view)
//mainScroll.translatesAutoresizingMaskIntoConstraints = true
// set up the size for each view
creditScreen.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
forWeather.view.frame = CGRect(x: xOrigin, y: 0, width: self.view.frame.width, height: self.view.frame.height)
nowWeather.view.frame = CGRect(x: xOrigin * 2, y: 0, width: self.view.frame.width, height: self.view.frame.height)
mainScroll.contentSize = CGSize(width: CGFloat(view.frame.width * 3), height: CGFloat(view.frame.height))
mainScroll.contentOffset.x = view.frame.width * 3
mainScroll.setContentOffset(CGPoint(x: view.frame.width * 2, y: 0), animated: true)
//Set up the location manager here.
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
我不确定是什么导致了问题,也许是我设置 xib 的方式?当我搜索这个问题时,有人建议在主故事板中放置一个视图作为***视图,然后将滚动视图放在该***视图中。它对我不起作用。有人可以帮助解决这个问题吗?谢谢!
这里是源代码的 GitHub,以备不时之需。 https://github.com/lucky13820/air
【问题讨论】:
请编辑您的问题以包含实际代码或代码截图 @Paulw11 我用实际代码替换了屏幕截图。我应该添加更多代码吗?我认为这些是唯一与布局相关的代码。我做了故事板中的所有约束。 【参考方案1】:要回答您的黑屏问题,请使用此代码
mainScroll.setContentOffset(CGPoint(x: view.frame.width * 2, y: 0), 动画:真)
以正确的比例将其向右移动,我已经在 iPhone 8、8 plus 和 X 中进行了测试。
【讨论】:
【参考方案2】:经过更多研究和反复试验,我修复了它。
我添加了两行代码,并在属性检查器中关闭了滚动视图的自动调整大小子视图。
mainScroll.contentSize = CGSize(width: CGFloat(xOrigin * 3), height: CGFloat(self.view.frame.height))
mainScroll.translatesAutoresizingMaskIntoConstraints = true
谢谢大家。
【讨论】:
以上是关于iOS:自动布局的问题。模拟器结果随着情节提要的变化而变化的主要内容,如果未能解决你的问题,请参考以下文章