ios - 为什么我的 View Controller 没有显示在 ScrollView Controller 上?

标签 ios swift uiviewcontroller uiscrollview uipagecontrol

我有三步 View Controller 。我试图使用 ScrollView 在单个 View Controller (RegisterViewController)上显示这三个步骤,以便用户可以滑动这些步骤。

我看到了其他一些帖子并了解到了这一点。当我运行该应用程序时,我得到一个带有 RegisterViewController 背景颜色的空白屏幕。我在步骤 View Controller 中编写了一些 println 语句来检查它们是否正在实例化,并且我可以在控制台上看到这些语句的输出。请问有人可以帮忙吗?

class RegisterViewController: UIViewController {

  @IBOutlet weak var scrollView: UIScrollView!
  @IBOutlet weak var registerStepsPageControl: UIPageControl!

  override func viewDidLoad() {
    super.viewDidLoad()
    setupScrollView()
  }

  func setupScrollView() {
    let storyboard = UIStoryboard(name: "Login", bundle: nil)
    let stepOneViewController = storyboard.instantiateViewControllerWithIdentifier("RegisterStepOne") as! RegisterStepOneViewController
    let stepTwoViewController = storyboard.instantiateViewControllerWithIdentifier("RegisterStepTwo") as! RegisterStepTwoViewController
    let stepThreeViewController = storyboard.instantiateViewControllerWithIdentifier("RegisterStepThree") as! RegisterStepThreeViewController

    var stepViewControllers = [stepOneViewController, stepTwoViewController, stepThreeViewController]

    for index in 0..<stepViewControllers.count {
      self.addChildViewController(stepViewControllers[index])

      let originX: CGFloat = CGFloat(index) * CGRectGetWidth(self.scrollView.frame);
      stepViewControllers[index].view.frame = CGRectMake(originX, 0, self.view.frame.size.width, self.view.frame.size.height);
      stepViewControllers[index].view.frame.size = self.view.frame.size
      self.scrollView.addSubview(stepViewControllers[index].view)
      stepViewControllers[index].didMoveToParentViewController(self)
    }
    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * CGFloat(stepViewControllers.count), self.view.frame.height)
    self.scrollView.delegate = self
    self.registerStepsPageControl.numberOfPages = stepViewControllers.count
  }
}

编辑01: 下面的代码有效。它加载图像并且它们按预期显示。但我不知道从其他 View Controller 加载 View 时可能会出现什么问题。

@IBOutlet weak var tutorialStepsPageControl: UIPageControl!

@IBOutlet weak var scrollView: UIScrollView!

var stepImages: [UIImage] = [UIImage(named: "tutorial_image_step1")!, UIImage(named: "tutorial_image_step2")!, UIImage(named: "tutorial_image_step3")!]


override func viewDidLoad() {
  super.viewDidLoad()
  self.tutorialStepsPageControl.numberOfPages = stepImages.count
  setupScrollView()
}

func setupScrollView() {
  var imageFrame: CGRect = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)
  var imageView: UIImageView!

  for index in 0..<stepImages.count {
    imageFrame.origin.x = self.view.frame.size.width * CGFloat(index)
    imageFrame.size = self.view.frame.size

    imageView = UIImageView(frame: imageFrame)
    imageView.image = stepImages[index]
    imageView.contentMode = .ScaleAspectFit
    self.scrollView.addSubview(imageView)
  }

  self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * CGFloat(stepImages.count), self.view.frame.size.height)
  self.scrollView.delegate = self
}

最佳答案

尝试移动线条:

self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * CGFloat(stepViewControllers.count), self.view.frame.height)

此行上方:

for index in 0..<stepViewControllers.count {

此问题可能是由于您在发送 contentSize 之前添加 subview 所致。

关于ios - 为什么我的 View Controller 没有显示在 ScrollView Controller 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31610091/

相关文章:

ios - 用于从文件创建一组对象的单独类?

swift - 如何阻止 MapView 自动滚动?

ios - 无法访问 tableview 属性以获取在自定义单元格中单击的按钮的索引

ios - 就地排序 Objective-C 数组

ios - 移动 View 并更改 uiimageview 的图像不执行 View 的移动

ios - Storyboard - 弹出框的委托(delegate)

ios - Swift:如何使 UIView 在 UITableViewCell 中可点击?

ios - Swift Playgrounds 和 Playground 书籍

iPhone - 用另一个模态视图覆盖一个模态视图

iOS - 从 subview 调用 presentViewController 后显示意外方向