swift - 以编程方式将视图水平添加到 UIScrollView
问题描述
我正在尝试将三个相同的图像视图堆叠在一起。图像比屏幕大,我希望能够向右滚动,如果我走到最后,就会看到图像重复三遍。这些视图不断堆叠在彼此之上,而不是彼此相邻。我无法弄清楚我做错了什么。任何帮助将不胜感激。
这是我的代码:
func stackThreeImagesHorizontallyToScrollView(imageToStack :UIImage, scrollView: UIScrollView){
var previousAnchor = scrollView.contentLayoutGuide.leadingAnchor
for i in 0 ..< 3 {
let imageViewToStack = UIImageView(image: imageToStack)
switch i {
case 0:
imageViewToStack.backgroundColor = UIColor.green
break
case 1:
imageViewToStack.backgroundColor = UIColor.purple
break
case 2:
imageViewToStack.backgroundColor = UIColor.yellow
break
default: break
}
scrollView.addSubview(imageViewToStack)
NSLayoutConstraint.activate([
imageViewToStack.leadingAnchor.constraint(equalTo: previousAnchor, constant: 0),
imageViewToStack.heightAnchor.constraint(equalToConstant: imageToStack.size.height),
imageViewToStack.widthAnchor.constraint(equalToConstant: imageToStack.size.width),
imageViewToStack.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 0),
imageViewToStack.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0),
imageViewToStack.trailingAnchor.constraint(equalTo: imageViewToStack.leadingAnchor, constant: imageToStack.size.width)
])
previousAnchor = imageViewToStack.trailingAnchor
}
previousAnchor.constraint(equalTo: scrollView.trailingAnchor, constant: 0).isActive = true
}
解决方案
您忘记将translatesAutoresizingMaskIntoConstraints
属性设置imageViewToStack
为false
:
func stackThreeImagesHorizontallyToScrollView(imageToStack: UIImage, scrollView: UIScrollView) {
var previousAnchor = scrollView.contentLayoutGuide.leadingAnchor
for i in 0 ..< 3 {
let imageViewToStack = UIImageView(image: imageToStack)
/// ADD THIS LINE
imageViewToStack.translatesAutoresizingMaskIntoConstraints = false
switch i {
case 0:
imageViewToStack.backgroundColor = UIColor.green
break
case 1:
imageViewToStack.backgroundColor = UIColor.purple
break
case 2:
imageViewToStack.backgroundColor = UIColor.yellow
break
default: break
}
scrollView.addSubview(imageViewToStack)
NSLayoutConstraint.activate([
imageViewToStack.leadingAnchor.constraint(equalTo: previousAnchor, constant: 0),
imageViewToStack.heightAnchor.constraint(equalToConstant: imageToStack.size.height),
imageViewToStack.widthAnchor.constraint(equalToConstant: imageToStack.size.width),
imageViewToStack.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 0),
imageViewToStack.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0),
imageViewToStack.trailingAnchor.constraint(equalTo: imageViewToStack.leadingAnchor, constant: imageToStack.size.width)
])
previousAnchor = imageViewToStack.trailingAnchor
}
previousAnchor.constraint(equalTo: scrollView.trailingAnchor, constant: 0).isActive = true
}
推荐阅读
- excel - 多行单元格输入到输出多行单元格的公式
- python - 是否可以测量沿 x/y 轴旋转的表面的角度?
- python - 使用 python 和 mcpi 的 Minecraft 自定义命令
- opencl - OpenCL 找不到 GPU 设备
- azure-devops - 如何使用 Specflow+Runner 在 Azure 测试结果中附加屏幕截图
- python - 我将如何通过 python 更改不和谐的语言?
- jquery - 我正在从另一个子域(使用 jquery)加载菜单,并且我需要其他子域的相对链接 - 我该怎么做?
- php - PHP Mail_mime 在内容中添加反斜杠
- php - PHP 使用 sqlsrv 一次检索具有流内容的多行
- django - 在没有提交的情况下更改表单中的输入文件后,Firefox 刷新不会更新网页