我有一张带有图片的ScrollView。从转换到Xcode8 / Swift 3后,图像不再适合ScrollView的大小。在Xcode 7/2 swift图像中,图像内部保持原始尺寸,非常适合滚动和完美匹配。以下是相应的代码:
import UIKit
class GoaLawahViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var menuButton: UIBarButtonItem!
@IBOutlet weak var ScrollView: UIScrollView!
@IBOutlet weak var PageControl: UIPageControl!
override func viewDidLoad() {
super.viewDidLoad()
let ScrollViewWidth:CGFloat = self.ScrollView.frame.width
let scrollViewHeight:CGFloat = self.ScrollView.frame.height
let imgOne = UIImageView(frame: CGRect(x: 0, y: 0,width: ScrollViewWidth, height: scrollViewHeight))
imgOne.image = UIImage(named: "GoaLawah04.jpg")
let imgTwo = UIImageView(frame: CGRect(x: ScrollViewWidth, y: 0,width: ScrollViewWidth, height: scrollViewHeight))
imgTwo.image = UIImage(named: "GoaLawah07.jpg")
let imgThree = UIImageView(frame: CGRect(x: ScrollViewWidth*2, y: 0,width: ScrollViewWidth, height: scrollViewHeight))
imgThree.image = UIImage(named: "GoaLawah09.jpg")
self.ScrollView.addSubview(imgOne)
self.ScrollView.addSubview(imgTwo)
self.ScrollView.addSubview(imgThree)
self.ScrollView.contentSize = CGSize(width: self.ScrollView.frame.width * 3, height: 1.0)
self.ScrollView.delegate = self
self.PageControl.currentPage = 0
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView){
// Test the offset and calculate the current page after scrolling ends
let pageWidth:CGFloat = scrollView.frame.width
let currentPage:CGFloat = floor((scrollView.contentOffset.x-pageWidth/2)/pageWidth)+1
// Change the indicator
self.PageControl.currentPage = Int(currentPage);
}
}
答案 0 :(得分:0)
尝试在containerView上添加你的imageViews(只是一个新的空白UIView),然后在你的scrollView上添加containerView
答案 1 :(得分:0)
附件是我的新代码,它的工作原理。不明白的是,我被迫删除了我的位置限制,以使其正常运作
import UIKit
类PandangBaiViewController:UIViewController,UIScrollViewDelegate {
@IBOutlet weak var PageControl: UIPageControl!
@IBOutlet weak var ScrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
let ScrollViewWidth:CGFloat = self.ScrollView.frame.width
let scrollViewHeight:CGFloat = self.ScrollView.frame.height
let imgOne = UIImageView(frame: CGRect(x: 0, y: 0,width: ScrollViewWidth, height: scrollViewHeight))
imgOne.image = UIImage(named: "1PadangBay.jpg")
imgOne.contentMode = UIViewContentMode.scaleAspectFit
self.ScrollView.addSubview(imgOne)
let imgTwo = UIImageView(frame: CGRect(x: ScrollViewWidth, y: 0,width: ScrollViewWidth, height: scrollViewHeight))
imgTwo.image = UIImage(named: "2PadangBay.jpg")
imgTwo.contentMode = UIViewContentMode.scaleAspectFit
self.ScrollView.addSubview(imgTwo)
let imgThree = UIImageView(frame: CGRect(x: ScrollViewWidth*2, y: 0,width: ScrollViewWidth, height: scrollViewHeight))
imgThree.image = UIImage(named: "PadangBaiinternet1.jpg")
imgThree.contentMode = UIViewContentMode.scaleAspectFit
self.ScrollView.addSubview(imgThree)
let imgFour = UIImageView(frame: CGRect(x: ScrollViewWidth*3, y: 0,width: ScrollViewWidth, height: scrollViewHeight))
imgFour.image = UIImage(named: "PadangBaiinternet2.jpg")
imgFour.contentMode = UIViewContentMode.scaleAspectFit
self.ScrollView.addSubview(imgFour)
let imgFive = UIImageView(frame: CGRect(x: ScrollViewWidth*4, y: 0,width: ScrollViewWidth, height: scrollViewHeight))
imgFive.image = UIImage(named: "PadangBaiinternet3.jpg")
imgFive.contentMode = UIViewContentMode.scaleAspectFit
self.ScrollView.addSubview(imgFive)
self.ScrollView.contentSize = CGSize(width: ScrollViewWidth * 5, height: scrollViewHeight)
self.ScrollView.isPagingEnabled = true
self.PageControl.currentPage = 0
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView){
// Test the offset and calculate the current page after scrolling ends
let pageWidth:CGFloat = scrollView.frame.width
let currentPage:CGFloat = floor((scrollView.contentOffset.x-pageWidth/2)/pageWidth)+1
// Change the indicator
self.PageControl.currentPage = Int(currentPage);
}
}