我最初的UIScrollView问题现在似乎与autolayout有关

对于我使用UIScrollView第一个挑战我修改了这个例子 ,使UIScrollView显示另一种背景颜色,而且每页显示另一个UIViewUILabel 。 但我可以轻松选择显示UITableViewUIButtonUIImage等对象。

潜在地, UIScrollView可能不仅仅是一个巨大的内容视图,用户可以从一个部分滚动到另一个部分,例如,某些页面可能有一个将用户带到特定页面的UIButton ,就像我们使用书籍一样。

代码改进

自从我第一次发布以来,我的问题已经发生了变化 最初在第1页上堆积标签(如下所示 ),但现在已经更正了。 我还包括此扩展名以使字体更大。

进一步改善?

随着代码的发展,我越来越意识到其他问题,例如iPhone 5图像( 如下 )在UILabel居中而不是UIView iPhone 7上显示不同。 所以我的下一个挑战可能是学习如何将UIScrollViewAutolayout.结合起来Autolayout. 我邀请任何人发现可能有问题的其他事情。

在此处输入图像描述 ViewController.swift(更正)

 import UIKit class ViewController: UIViewController,UIScrollViewDelegate { let scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: 320, height: 480)) var views = [UIView]() var lables = [UILabel]() var colors:[UIColor] = [UIColor.red, UIColor.magenta, UIColor.blue, UIColor.cyan, UIColor.green, UIColor.yellow] var frame: CGRect = CGRect.zero var pageControl: UIPageControl = UIPageControl(frame: CGRect(x: 50, y: 500, width: 200, height: 50)) override func viewDidLoad() { super.viewDidLoad() initialiseViewsAndLables() configurePageControl() scrollView.delegate = self self.view.addSubview(scrollView) for index in 0..<colors.count { frame.origin.x = self.scrollView.frame.size.width * CGFloat(index) frame.size = self.scrollView.frame.size self.scrollView.isPagingEnabled = true views[index].frame = frame views[index].backgroundColor = colors[Int(index)] views[index].layer.cornerRadius = 20 views[index].layer.masksToBounds = true lables[index].frame = frame lables[index].center = CGPoint(x: (view.frame.midX + frame.origin.x), y: view.frame.midY) lables[index].text = String(index + 1) lables[index].defaultFont = UIFont(name: "HelveticaNeue", size: CGFloat(200)) lables[index].textAlignment = .center lables[index].textColor = .black let subView1 = views[index] let subView2 = lables[index] self.scrollView .addSubview(subView1) self.scrollView .addSubview(subView2) } print(views, lables) self.scrollView.contentSize = CGSize(width: self.scrollView.frame.size.width * CGFloat(colors.count), height: self.scrollView.frame.size.height) pageControl.addTarget(self, action: Selector(("changePage:")), for: UIControlEvents.valueChanged) } func initialiseViewsAndLables() { // Size of views[] and lables[] is linked to available colors for index in 0.. UIColor { let index = colors[pageControl.currentPage] return (index) } func changePage(sender: AnyObject) -> () { scrollView.setContentOffset(CGPoint(x: CGFloat(pageControl.currentPage) * scrollView.frame.size.width, y: 0), animated: true) } func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width) pageControl.currentPage = Int(pageNumber) pageControl.backgroundColor = getColour() } } 

延期

  extension UILabel{ var defaultFont: UIFont? { get { return self.font } set { self.font = newValue } } } 

每帧上标签的中心点必须由内容视图的原点偏移( 正如Baglan指出的那样 )。 我相应地修改了以下代码行。

 lables[Int(index)].center = CGPoint(x: (view.frame.midX + frame.origin.x), y: view.frame.midY)