【问题标题】:How to set content width to the size of device/parent width?如何将内容宽度设置为设备/父宽度的大小?
【发布时间】:2019-07-05 15:33:26
【问题描述】:

我的功能滚动中的图像奇怪地出现在较小尺寸的手机中,例如iPhone 5siPhone 6 等。

编辑:我正在使用UIScrollView 来执行此操作。 :)

我尝试将我的代码添加到viewDidLayoutSubviewsviewWillLayoutSubviews,但它似乎不起作用。

//第一次尝试

override func viewDidLayoutSubviews() {
    featureScroll.contentSize = CGSize(width: self.view.bounds.width * CGFloat(featureArray.count), height: 300)
}

//第二次尝试

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()()
    featureScroll.contentSize = CGSize(width: self.view.bounds.width * CGFloat(featureArray.count), height: 300)
}

编辑: //我如何将图像加载到featureScroll中

let feature1 = ["image": "ic_home1"]
let feature2 = ["image": "ic_home2"]
let feature3 = ["image": "ic_home3"]

var featureArray = [Dictionary<String, String>](


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    featureArray = [feature1, feature2, feature3]
    featureScroll.isPagingEnabled = true
    featureScroll.contentSize = CGSize(width: self.view.bounds.width * CGFloat(featureArray.count), height: 300)
    featureScroll.showsHorizontalScrollIndicator = false

    featureScroll.delegate = self

    loadFeatures()


}

func loadFeatures(){
    for (index, feature) in featureArray.enumerated() {
        if let featureView = Bundle.main.loadNibNamed("Feature", owner: self, options: nil)?.first as? FeatureView {

            featureView.featureImage.image = UIImage(named: feature["image"]!)

            featureScroll.addSubview(featureView)

            featureView.frame.size.width = featureScroll.bounds.size.width
            featureView.frame.origin.x = CGFloat(index) * featureScroll.bounds.size.width


        }
    }

}


func scrollViewDidScroll(_ featureScroll: UIScrollView) {
    let page = featureScroll.contentOffset.x / featureScroll.frame.size.width
    featurePageControl.currentPage = Int(page)
}

下面的链接显示的是实际结果,我想去掉空格,我该怎么做呢?

--> https://imgur.com/8AUZh4U.png

提前感谢您的帮助! :)

【问题讨论】:

  • 一切都使用自动布局吗?第二个 - 也是愚蠢的 - 问题,但你在使用 IB 吗?第三个(不那么愚蠢的)问题,您使用的是UICollectionView 还是UIScrollView?总之,这些对于处理“内在”价值观意味着很多,我相信你会反对。
  • 1) 是的,一切都在自动布局中完成。 2) 是的,我正在使用 IB。 3)我正在使用UIScrollView :)
  • 如果您使用的是自动布局,能否在界面生成器中显示约束?
  • 需要更多关于如何在UIScrollView 中添加内容的代码。尝试使用UICollectionView 而不是UIScrollView
  • @RomyIlano : 这是我使用的约束:) --> imgur.com/pxkiyhQ

标签: ios swift uiscrollview viewdidlayoutsubviews


【解决方案1】:

理论

scrollView 需要知道它的位置(它的框架 = 位置和大小)和它的内容的大小(它将滚动)。

垂直 stackView 需要知道它的位置 (x, y) 和它的宽度。它的高度由它的内容和设置(例如项目之间的间距)决定。


示例

因此,根据您的需要,在整个屏幕上有一个滚动视图并在里面有一堆垂直视图,您可以执行这样的操作(仅使用约束,没有以编程方式设置)


UIScrollView:

在 0 到其父视图的顶部、前导、尾随、底部约束


垂直 UIStackView:

ViewController 视图的前导、尾随、约束为 0。 Top,leading, trailing,bottom = 0 to its superview (scrollView) > 这将使 ScrollView ...当 stackView 内容大于 scrollView 的高度时滚动


StackView 的项目:

在你的情况下,我认为这是一堆 imageViews。每个项目都需要设置自己的高度。

ImageView 高度的总和(以及在 stackView 中设置的间距)将决定 stackView 的高度,这将决定 scrollView 的内容高度(以及可滚动的高度)。

更多关于UIScrollView的信息see the documentation here

更多信息UIStackViewsee the documentation here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多