gpt4 book ai didi

ios - 如何以编程方式设置 UIScrollView 以使用 autoLayout 水平滚动

转载 作者:可可西里 更新时间:2023-11-01 01:56:52 24 4
gpt4 key购买 nike

我正在尝试实现一种行为,即我在表格 View 中有一个最小宽度的表单。所以基本上,如果屏幕很宽, View 只会垂直滚动,但当屏幕很窄时,表单会缩小到最小宽度,然后开始水平滚动,以免内容松散。因此,我需要使用 autoLayout 来设置这些约束,并且我想以编程方式进行(因为我正在使用的框架)。

问题是,我根本无法让我的 View 水平滚动。我已经阅读了所有我能找到的关于它的内容,并尝试了我能想到的一切,但没有任何效果。现在我试着在我的 View 中添加一张大图片并让它向两个方向滚动,但我无法让它工作。

这是我的层次结构:

>UIView
>>UIScrollView
>>>ContentView (UIView)
>>>>ImageView

这是我的代码:

   override func viewDidLoad() {
if scrollView == nil {
scrollView = UIScrollView(frame: view.bounds)
scrollView.backgroundColor = .groupTableViewBackground
scrollView.isDirectionalLockEnabled = true
scrollView.showsHorizontalScrollIndicator = true
}
if scrollView.superview == nil {
view.addSubview(scrollView)

scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

let contentView = UIView(frame: view.bounds)
scrollView.addSubview(contentView)

contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
contentView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
contentView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true

let a = contentView.heightAnchor.constraint(equalTo: scrollView.heightAnchor)
let b = contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor)
a.priority = .defaultLow
b.priority = .defaultLow
a.isActive = true
b.isActive = true

let image = MyImage.icon(named: "myImage", of: CGSize(width: 1000, height: 1000))
let imageView = UIImageView(image: image)

imageView.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(imageView)

imageView.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
imageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor).isActive = true

}
super.viewDidLoad()
}

当我调试 View 层次结构时,我可以看到图像的大小仍然正确 (1000, 1000) 但是 scrollView 的内容大小没有更新并且图片被截断, 没有滚动。

<UIScrollView: 0x11ead5c00; frame = (0 0; 834 1112); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x1c8853800>; layer = <CALayer: 0x1c8c32240>; contentOffset: {0, -64}; contentSize: {834, 1112}; adjustedContentInset: {64, 0, 0, 0}>

<UIImageView: 0x11a89b000; frame = (0 0; 1000 1000); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1c8231c80>>

我找到并查看了这个示例,以编程方式设置 ScrollView https://github.com/zaxonus/AutoLayScroll .它垂直滚动,但对于这两种情况,我都无法将其设置为水平滚动。

请帮忙,我忽略了什么?

最佳答案

要使您的示例 scrollView 内容大小为 1000x1000,只需将这些约束添加到 imageView:

imageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true
imageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor).isActive = true

没有它们,您的 contentView 不知道它应该包装 imageView 因此它的大小是根据低优先级约束 ab

关于ios - 如何以编程方式设置 UIScrollView 以使用 autoLayout 水平滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52111080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com