UIImageViews 在带有分页的 UIScrollView 中无法正确缩放
UIImageViews not scaling correctly in UIScrollView with paging
我正在尝试构建一个非常简单的UIScrollView
,其中包含多个启用了分页的图像。
但是,我无法将图像的大小正确调整到 UIScrollView
的边界。图像总是比边界大,因此弄乱了我的分页。
我在 Interface Builder
中有一个 UIScollView
和一个 UIPageControl
,在我的 ViewController swift 文件中有 link。
这是我的 viewDidLoad
方法(pageImages
定义为 var pageImages: [UIImage] = []
,pageViews
定义为 var pageViews: [UIImageView?] = []
:
override func viewDidLoad() {
scrollView.delegate = self
scrollView.pagingEnabled = true
scrollView.scrollEnabled = true
scrollView.showsHorizontalScrollIndicator = false
scrollView.showsVerticalScrollIndicator = false
scrollView.bounces = true
scrollView.scrollsToTop = false
pageImages = [UIImage(named: "image1")!,
UIImage(named: "image2")!,
UIImage(named: "image3")!,
UIImage(named: "image4")!,
UIImage(named: "image5")!]
let pageCount = pageImages.count
pageControl.currentPage = 0
pageControl.numberOfPages = pageCount
for (var i=0; i<pageCount; i++) {
var xOrigin: CGFloat = CGFloat(i) * scrollView.bounds.size.width
let imageView: UIImageView = UIImageView(frame: CGRectMake(xOrigin, 0, scrollView.bounds.size.width, scrollView.bounds.size.height))
imageView.image = pageImages[i]
imageView.contentMode = UIViewContentMode.ScaleAspectFill
imageView.clipsToBounds = true
scrollView.addSubview(imageView)
}
let pagesScrollViewSize = scrollView.frame.size
scrollView.contentSize = CGSize(width: pagesScrollViewSize.width * CGFloat(pageImages.count),
height: pagesScrollViewSize.height)
}
我的scrollViewDidScroll
方法如下:
func scrollViewDidScroll(scrollView: UIScrollView) {
let pageWidth = self.scrollView.frame.size.width
let page = Int(floor((self.scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1)
self.pageControl.currentPage = page
}
谁能发现我的错误?我是否必须在 viewWillAppear
或 viewDidAppear
中设置 contentMode
?
尝试在以下条件下设置您的 imageViews 尺寸:
- (void)viewDidLayoutSubviews
此时,自动布局已根据您在界面生成器上定义的布局系统完成调整 views/subviews 的大小,因此如果您的计算正确(根据您的要求),这应该可以正常工作。
我正在尝试构建一个非常简单的UIScrollView
,其中包含多个启用了分页的图像。
但是,我无法将图像的大小正确调整到 UIScrollView
的边界。图像总是比边界大,因此弄乱了我的分页。
我在 Interface Builder
中有一个 UIScollView
和一个 UIPageControl
,在我的 ViewController swift 文件中有 link。
这是我的 viewDidLoad
方法(pageImages
定义为 var pageImages: [UIImage] = []
,pageViews
定义为 var pageViews: [UIImageView?] = []
:
override func viewDidLoad() {
scrollView.delegate = self
scrollView.pagingEnabled = true
scrollView.scrollEnabled = true
scrollView.showsHorizontalScrollIndicator = false
scrollView.showsVerticalScrollIndicator = false
scrollView.bounces = true
scrollView.scrollsToTop = false
pageImages = [UIImage(named: "image1")!,
UIImage(named: "image2")!,
UIImage(named: "image3")!,
UIImage(named: "image4")!,
UIImage(named: "image5")!]
let pageCount = pageImages.count
pageControl.currentPage = 0
pageControl.numberOfPages = pageCount
for (var i=0; i<pageCount; i++) {
var xOrigin: CGFloat = CGFloat(i) * scrollView.bounds.size.width
let imageView: UIImageView = UIImageView(frame: CGRectMake(xOrigin, 0, scrollView.bounds.size.width, scrollView.bounds.size.height))
imageView.image = pageImages[i]
imageView.contentMode = UIViewContentMode.ScaleAspectFill
imageView.clipsToBounds = true
scrollView.addSubview(imageView)
}
let pagesScrollViewSize = scrollView.frame.size
scrollView.contentSize = CGSize(width: pagesScrollViewSize.width * CGFloat(pageImages.count),
height: pagesScrollViewSize.height)
}
我的scrollViewDidScroll
方法如下:
func scrollViewDidScroll(scrollView: UIScrollView) {
let pageWidth = self.scrollView.frame.size.width
let page = Int(floor((self.scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1)
self.pageControl.currentPage = page
}
谁能发现我的错误?我是否必须在 viewWillAppear
或 viewDidAppear
中设置 contentMode
?
尝试在以下条件下设置您的 imageViews 尺寸:
- (void)viewDidLayoutSubviews
此时,自动布局已根据您在界面生成器上定义的布局系统完成调整 views/subviews 的大小,因此如果您的计算正确(根据您的要求),这应该可以正常工作。