Ios 如果TranslatesAutoResizengMaskinToConstraints=false,则scrollview不工作
我在使用translatesAutoresizingMaskIntoConstraints时遇到一些问题。 我正在创建一个滚动视图,您可以在其中向左或向右滑动。每次你得到一个新的图像。但由于某些原因,如果translatesAutoresizingMaskIntoConstraints=false,我无法滑动 这是translatesAutoresizingMaskIntoConstraints=false。在这种情况下,我不能向左或向右滑动 但是,如果我将translatesAutoResizengMaskintoConstraints=true设置为这样,我可以左右滑动。问题是,布局混乱 我的代码:Ios 如果TranslatesAutoResizengMaskinToConstraints=false,则scrollview不工作,ios,swift,uiimageview,uiimage,scrollview,Ios,Swift,Uiimageview,Uiimage,Scrollview,我在使用translatesAutoresizingMaskIntoConstraints时遇到一些问题。 我正在创建一个滚动视图,您可以在其中向左或向右滑动。每次你得到一个新的图像。但由于某些原因,如果translatesAutoresizingMaskIntoConstraints=false,我无法滑动 这是translatesAutoresizingMaskIntoConstraints=false。在这种情况下,我不能向左或向右滑动 但是,如果我将translatesAutoResiz
var scrollView: UIScrollView = {
let scrollView = UIScrollView()
scrollView.showsHorizontalScrollIndicator = false
scrollView.showsVerticalScrollIndicator = false
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.alwaysBounceVertical = false
scrollView.alwaysBounceHorizontal = false
scrollView.isPagingEnabled = true
return scrollView
}()
override func viewDidLoad() {
super.viewDidLoad()
scrollView.frame = contentView.frame
contentView.addSubview(scrollView)
scrollView.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 0).isActive = true
scrollView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true
scrollView.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: 0).isActive = true
scrollView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true
}
var frame = CGRect.zero
func viewTutorial() {
for i in 0..<arrayOfTutorilImages.count {
frame.origin.x = scrollView.frame.size.width * CGFloat((i))
frame.size = scrollView.frame.size
let imageView = UIImageView(frame: frame)
imageView.image = UIImage(named: arrayOfTutorilImages[i])
imageView.contentMode = .scaleAspectFit
imageView.backgroundColor = .red
imageView.translatesAutoresizingMaskIntoConstraints = false
self.scrollView.addSubview(imageView)
imageView.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 0).isActive = true
imageView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true
imageView.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: 0).isActive = true
imageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true
}
scrollView.contentSize = CGSize(width: (scrollView.frame.size.width * CGFloat(arrayOfTutorilImages.count)), height: scrollView.frame.size.height)
scrollView.delegate = self
}
extension TutorialViewController: UIScrollViewDelegate {
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let pageNumber = scrollView.contentOffset.x / scrollView.frame.size.width
pageControl.currentPage = Int(pageNumber)
}
}
创建时添加滚动视图框
var scrollView: UIScrollView = {
let scrollView = UIScrollView(frame:.zero)
//other properties
return scrollView
}()
ImageView约束与ScrollView相同。 这就是您无法滑动的原因,因为您的所有图像都具有相同的约束,并且它们位于一个图像之上。 你应该像这样做: imageView.TranslatesAutoResizezingMaskintoConstraints=true imageView.frame.size=contentView.frame.size imageView.frame.origin=CGPointx:imageIndex*contentView.frame.size.width,y:0.0
您可能需要添加约束,您可以尝试
class TutorialViewController: UIViewController {
var scrollView: UIScrollView = {
let scrollView = UIScrollView()
scrollView.showsHorizontalScrollIndicator = false
scrollView.showsVerticalScrollIndicator = false
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.alwaysBounceVertical = false
scrollView.alwaysBounceHorizontal = false
scrollView.isPagingEnabled = true
return scrollView
}()
override func viewDidLoad() {
super.viewDidLoad()
contentView.addSubview(scrollView)
scrollView.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 0).isActive = true
scrollView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true
scrollView.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: 0).isActive = true
scrollView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true
viewTutorial()
}
func viewTutorial() {
var con:UIView = scrollView
for i in 0..<arrayOfTutorilImages.count {
let imageView = UIImageView(frame: CGRect.zero)
imageView.image = UIImage(named: arrayOfTutorilImages[i])
imageView.contentMode = .scaleAspectFit
imageView.backgroundColor = .red
imageView.translatesAutoresizingMaskIntoConstraints = false
self.scrollView.addSubview(imageView)
if con == scrollView {
imageView.leftAnchor.constraint(equalTo: con.leftAnchor, constant: 0).isActive = true
}
else {
imageView.leftAnchor.constraint(equalTo: con.rightAnchor, constant: 0).isActive = true
}
imageView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 0).isActive = true
if i == arrayOfTutorilImages.count - 1 {
imageView.rightAnchor.constraint(equalTo: scrollView.rightAnchor, constant: 0).isActive = true
}
imageView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0).isActive = true
imageView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: 0).isActive = true
con = imageView
}
scrollView.delegate = self
}
}
extension TutorialViewController: UIScrollViewDelegate {
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let pageNumber = scrollView.contentOffset.x / scrollView.frame.size.width
}
}
使用Constraints时不要设置框架
编辑属性后仍然存在相同的问题为什么使用此设置而不是UIcollectionView?有什么要求吗?这是一个教程,我对它进行了一点扩展。内容视图是从一个Outlet创建的吗?是的,这是从一个outletError:CGRect没有成员大小的hmm。。。CGRect具有size属性,页面控件正在工作,但图像是以bigadded imageView.widthAnchor.constraintequalTo:view.widthAnchor的方式添加的,常量:0.isActive=true在编辑中重试图像现在大小正确。但还有一个问题。在图像的上方和下方都有一个很大的空间。好的,我编辑了一个高度锚定,并将约束设置为equalTo:contentView