【问题标题】:Horizontal ScrollView not fit its sub ImageViews?Horizo​​ntal ScrollView 不适合其子 ImageViews?
【发布时间】:2018-03-30 07:33:46
【问题描述】:

我想要带有图像视图的水平滚动视图,但图像不适合滚动。我正在做这个代码,但没有得到正确的东西 这是我的代码

@IBOutlet weak var upperScroll: UIScrollView!
    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.navigationBar.isHidden = true
        // Do any additional setup after loading the view.
        var logoImage: [UIImage] = [
            UIImage(named: "slider.png")!,
            UIImage(named: "slider.png")!,
            UIImage(named: "slider.png")!,
            UIImage(named: "slider.png")!,
        ]

        upperScroll.isScrollEnabled = true
        let scrollWidth: Int = Int(self.view.frame.width)
        upperScroll.contentSize = CGSize(width: CGFloat(scrollWidth), height:(self.upperScroll.frame.height))
        upperScroll.frame = CGRect(x: 0, y: 51, width: upperScroll.frame.size.width, height: self.upperScroll.frame.height)
        upperScroll.backgroundColor = UIColor.red
        var xOffset: Int = 0
        for index in 0..<logoImage.count {
            let img = UIImageView(frame: CGRect(x: CGFloat(xOffset), y: 0, width: upperScroll.frame.size.width, height: self.upperScroll.frame.height))
            img.image = logoImage[index]
            upperScroll.addSubview(img)
            xOffset += 100
        }
        view.addSubview(upperScroll)
        upperScroll.contentSize = CGSize(width: CGFloat((scrollWidth + xOffset)), height: 110)

    }

但我想要这个

谁能帮帮我?谢谢

【问题讨论】:

  • 你要添加 4 次相同的图片,这很奇怪不是吗?
  • 你应该使用UICollectionView来实现这种功能。
  • @GuyKogus 我已经尝试过收藏视图,但我没有获得全宽图像视图
  • @CZ54 首先我正在测试,当页面将显示我想要的内容时,我将使用来自网络服务的图像
  • 正如@GuyKogus 所说,使用collectionView 而不是滚动视图。这将是高效且省时的。您必须将itemSize 的宽度与collectionView 的宽度相同。

标签: ios swift horizontalscrollview autoscroll


【解决方案1】:

只需删除您的 appdelegate 代码并添加我的功能 还设置滚动视图约束,如前导、尾随、顶部、底部零

  func scrollImage() {
            super.viewDidLoad()
            self.navigationController?.navigationBar.isHidden = true
            // Do any additional setup after loading the view.
            var logoImage: [UIImage] = [
            UIImage(named: "slider.png")!,
            UIImage(named: "slider.png")!,
            UIImage(named: "slider.png")!,
            UIImage(named: "slider.png")!]

            upperScroll.isPagingEnabled = true

            upperScroll.isScrollEnabled = true

            let scrollWidth: Int = Int(self.view.frame.width)
,
            upperScroll.contentSize = CGSize(width: CGFloat(scrollWidth), height:(self.upperScroll.frame.height))
            print(upperScroll.frame.size.width)
            upperScroll.backgroundColor = UIColor.red
            for index in 0..<logoImage.count {
                let xPosition = self.view.frame.width * CGFloat(index)
                upperScroll.layoutIfNeeded()
                let img = UIImageView(frame: CGRect(x: CGFloat(xPosition), y: 0, width: upperScroll.frame.size.width, height: self.upperScroll.frame.height))
                img.layoutIfNeeded()
                img.image = logoImage[index]
                upperScroll.addSubview(img)
            }
            view.addSubview(upperScroll)
            upperScroll.contentSize = CGSize(width: CGFloat((scrollWidth) * logoImage.count), height: self.upperScroll.frame.height)

        }

我希望它可以节省您的时间并且工作得很好

【讨论】:

    【解决方案2】:

    根据您的要求,xOffset += 100 应更改为xOffset += scrollWidth。并且内容大小设置为:

    upperScroll.contentSize = CGSize(width: CGFloat((scrollWidth * logoImage.count)), height: 110)
    

    记得为滚动视图启用分页。

    【讨论】:

      【解决方案3】:

      首先,你需要两个outlet用于滚动视图和PageControl,

       var contentWidth:CGFloat = 0.0
      
      // MARK: - Welcome screen with scroll view use page controll
      
      override func viewWillAppear(_ animated: Bool) {
          super.viewWillAppear(animated)
          scrollView.delegate = self
          let myImages = ["intro1_1.png", "intro2_2.png", "intro3_3.png"] // images which loaded in assets
          let imageWidth:CGFloat = view.frame.width
          let imageHeight:CGFloat = view.frame.height
          var xPosition:CGFloat = 0 //setup your position
          var scrollViewSize:CGFloat=0 //setup your position
      
          for image in myImages {
              let myImage:UIImage = UIImage(named: image)!
              let myImageView:UIImageView = UIImageView()
              myImageView.image = myImage
              myImageView.frame.size.width = imageWidth
              myImageView.frame.size.height = imageHeight
              myImageView.frame.origin.x = xPosition
              myImageView.frame.origin.y = 0
              scrollView.addSubview(myImageView)
              xPosition += imageWidth
              scrollViewSize += imageWidth
          }
          scrollView.contentSize = CGSize(width: scrollViewSize, height: imageHeight)
          scrollView.contentSize = CGSize(width: view.frame.width * 3, height: view.frame.height) //here you setup how many pages in scroll will
      
      }
      
      func scrollViewDidScroll(_ scrollView: UIScrollView) {
          let pageWidth:CGFloat = scrollView.frame.width
          let currentPage:CGFloat = floor((scrollView.contentOffset.x-pageWidth / 2)/pageWidth)+1
          self.pageControll.currentPage = Int(currentPage)
      }
      

      希望能帮到你

      【讨论】:

        猜你喜欢
        • 2021-03-30
        • 1970-01-01
        • 2015-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        相关资源
        最近更新 更多