Ios 使用自动布局的水平UIScrollView

Ios 使用自动布局的水平UIScrollView,ios,objective-c,uiscrollview,autolayout,Ios,Objective C,Uiscrollview,Autolayout,我已经尝试了很长一段时间了,并且浏览了很多关于SO的帖子和一些视频教程。我想创建一个水平滚动视图,其中包含一些按钮,如下所示: 我的视图层次结构如下所示: 视图控制器 看法 滚动视图 看法 钮扣 我对滚动视图设置了顶部、前导、尾随和底部约束。我已经将它的宽度设置为它的superview,并将它的高度设置为200。到目前为止还不错,对于scroll视图内部的视图,我已经将它的前导、尾随、顶部和底部约束设置为零,相对于它的superview,即scroll视图。我已经使它的宽度等

我已经尝试了很长一段时间了,并且浏览了很多关于SO的帖子和一些视频教程。我想创建一个水平滚动视图,其中包含一些按钮,如下所示:

我的视图层次结构如下所示:

  • 视图控制器
    • 看法
      • 滚动视图
        • 看法
          • 钮扣
我对滚动视图设置了顶部、前导、尾随和底部约束。我已经将它的宽度设置为它的superview,并将它的高度设置为200。到目前为止还不错,对于scroll视图内部的视图,我已经将它的前导、尾随、顶部和底部约束设置为零,相对于它的superview,即scroll视图。我已经使它的宽度等于视图控制器视图,因为这是解决这个不明确的宽度问题的方法。它解决了这个问题。现在我添加了所有按钮,并将它们的约束设置到它们的父视图中。现在,当我运行应用程序时,会出现类似上面添加的屏幕截图的屏幕,但是我无法滚动到最后一个元素。非常感谢您的帮助

在btn中写入代码,然后单击>>>>

let index = Int(scrollView.contentOffset.x/self.view.frame.size.width) + 1
        print("\(index)")
        if index < (selectedRestaurant.multipleImages.count)  {
            scrollView.setContentOffset(CGPoint(x: CGFloat(index) * self.view.frame.size.width, y: 0), animated: true)
        }
let index=Int(scrollView.contentOffset.x/self.view.frame.size.width)+1
打印(“\(索引)”)
如果索引<(SelectedRestarant.multipleImages.count){
scrollView.setContentOffset(CGPoint(x:CGFloat(索引)*self.view.frame.size.width,y:0),动画:true)
}
太简单了

  • 查看滚动视图(绘制左上右下和右上

  • 采用一个ui视图,它将充当一个容器视图(使用scrollView绘制左上右下约束)

  • 将您的视图控制器设置为1000px,这样您就可以使您的scrollView更大、更易于观看。稍后,您可以将其最小化

  • 现在把你的按钮放在里面请记住,,每个按钮都有顶部前导的宽度、高度和尾部(如有必要)宽度和高度对于scrollView很重要,因为它的大小取决于它

  • 图片价值千言万语

    这是我的等级制度

    这是故事板的布局设计。白色背景基本上是containerView

    这是输出。为了更好地理解,我给了一些颜色


    您必须将ScrollView内容视图的宽度设置为最后一个按钮x轴+最后一个按钮宽度。您需要在ScrollView内部添加一个UIView,作为ScrollView的contentView,因为您需要水平滚动,所以contentView的宽度应大于ScrollView的框架,所以,添加一个和scrollview高度相同的高度约束,并将宽度设置为一个大值,比如2000。现在创建一个宽度约束的IBOutlet,您将根据您的内容进行调整,在设置containerView后,在contentView而不是scrollview上添加所有按钮。。根据最后添加的按钮计算containerView的宽度,你的scrollview应该可以工作。哼,我认为你在搞乱scroll view中可滚动内容的内容大小。您必须设置滚动视图的内容视图(您已将视图设置为按钮的超级视图),确保该视图的宽度约束符合您的要求,即等于所有按钮宽度之和+按钮之间所有间距之和,您可以发布项目git链接,以便我为您修复。@dip:是指向git repo的链接,请看一看。修复了这个问题,我正在提出请求,请接受,或者你可以直接从ripo下载。我想你错过了一些东西,这就是为什么它不起作用。显示你的故事板布局我在评论中添加了GIT链接。只需删除旧的scrollView并创建一个新的。我在这里分享的东西工作得很好。不知怎么的,你的scrollView不工作。但是我的方法很好。我制作了两个版本,一个是stackView,另一个就是我提到的。这是我的git链接,谢谢,我会检查一下。对我来说,最后一个项目有尾随集也是很重要的
    let index = Int(scrollView.contentOffset.x/self.view.frame.size.width) - 1
            print("\(index)")
            if index >= 0 {
                scrollView.setContentOffset(CGPoint(x: CGFloat(index) * self.view.frame.size.width, y: 0), animated: true)
            }
    
    let index = Int(scrollView.contentOffset.x/self.view.frame.size.width) + 1
            print("\(index)")
            if index < (selectedRestaurant.multipleImages.count)  {
                scrollView.setContentOffset(CGPoint(x: CGFloat(index) * self.view.frame.size.width, y: 0), animated: true)
            }