gpt4 book ai didi

iOS 自动布局约束和框架不起作用

转载 作者:可可西里 更新时间:2023-11-01 04:41:13 24 4
gpt4 key购买 nike

我有一个 ScrollView ,它嵌套在一个位于容器中的 View Controller 中。使用名为 ScrollingViewController 的指定类的 View Controller 如下所示:

class ScrollingViewController: UIViewController {

@IBOutlet weak var scrollView: UIScrollView! //outlet for the Scroll View

override func viewDidLoad() {
super.viewDidLoad()

// 1) Create the two views used in the swipe container view
var storyboard = UIStoryboard(name: "App", bundle: nil)
var subOne: SubProfileOneViewController = storyboard.instantiateViewControllerWithIdentifier("subone") as! SubProfileOneViewController
var subTwo: SubProfileTwoViewController = storyboard.instantiateViewControllerWithIdentifier("subtwo") as! SubProfileTwoViewController

// 2) Add in each view to the container view hierarchy
// Add them in opposite order since the view hierarchy is a stack
self.addChildViewController(subTwo);
self.scrollView!.addSubview(subTwo.view);
subTwo.didMoveToParentViewController(self);

self.addChildViewController(subOne);
self.scrollView!.addSubview(subOne.view);
subOne.didMoveToParentViewController(self);

// 3) Set up the frames of the view controllers to align
// with each other inside the container view
var adminFrame :CGRect = subOne.view.frame;
adminFrame.origin.x = adminFrame.width;
subTwo.view.frame = adminFrame;

// 4) Finally set the size of the scroll view that contains the frames
var scrollWidth: CGFloat = 2 * self.view.frame.width
var scrollHeight: CGFloat = 262
self.scrollView!.contentSize = CGSizeMake(scrollWidth, scrollHeight);
// Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

基本上发生的事情是,分别使用该类 SubProfileOneViewControllerSubProfileTwoViewController 的两个 View Controller 被实例化为 subOnesubTwo。然后将它们作为 subview 添加到 ScrollView 中,以创建一个界面,用户可以在其中向右滑动以访问另一个 View (几乎像 Snapchat)。 subOnesubTwo 应该并排放置,用户应该能够从一个滚动到下一个,反之亦然。

这是我的 Storyboard中的所有内容: enter image description here

SubProfileOneViewControllerSubProfileTwoViewController 每个都有一个 View (分别用绿色和红色表示)并且每个都有完全相同的约束:高度 = 262,到 super View 的尾随空间= 0, 到 superview 的前导空间 = 0, 到 superview 的顶部空间 = 0

理想情况下,运行时应该有两个 View ,一个绿色,一个红色,并且用户应该能够在每个 View 之间滑动。然而,实际情况是这样的: enter image description here

绿色和红色 View 并没有占据整个屏幕宽度,而是在左侧被压缩成一个小条子,大部分 View Controller 是白色的,而不是它们各自的颜色。我已经尝试了很多事情,但我不确定自己做错了什么。

(ScollingViewController 中的代码归功于 github 上的 lbrendanl,链接在这里:https://github.com/lbrendanl/SwiftSwipeView)

最佳答案

具有自动布局的 ScrollView 的工作方式不同,您可以通过设置 translatesAutoresizingMaskIntoConstraints = true 并显式设置 contentSize 来仅使用一个 subview 。或者你设置 translatesAutoresizingMaskIntoConstraints = false 让它自己找出约束。访问此link了解更多详情

如你所愿,两者都应该全屏,然后你需要添加 AutoLayoutConstraints,像这样

  1. 将 greenView 固定到 super View
  2. 将 greenView 宽度设置为与 scrollViewWidth 相同,即 bounds.size.width(不是 contetnSizeWidth)
  3. 将左侧的 redView 固定到右侧的 greenView
  4. 将 redView 宽度值设置为与 scrollViewWidth 相同,即 bounds.size.width(不是 contetnSize.width)

关于iOS 自动布局约束和框架不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31842040/

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