仅在Autolayout中具有固定宽度的Scrollview垂直

时间:2015-02-06 22:27:11

标签: objective-c swift uiscrollview

在swift中,如何将滚动视图的宽度设置为屏幕大小的宽度?

我尝试设置正确的前导和尾随边界,但是我的aspectcalefill图像不断拉伸整个帧。

我试图将视图强制为屏幕宽度,并仅允许垂直滚动。

3 个答案:

答案 0 :(得分:1)

如果您想使用自动布局制作滚动视图,请尝试此操作。完全没有代码,因此您必须将文件拖出Xcode右侧。

在视图控制器中拖动并将滚动视图大小放置到您想要的任何大小,但看起来您希望将其设置为屏幕大小。将所有边缘固定到视图控制器的边缘。引脚拖尾,前导,顶部和底部。

现在,不要将项目放在滚动视图中,而是在滚动视图中放置另一个视图。使用此新视图,您将放置所有项目。您很可能必须向上或向下移动视图以将它们全部放置并调整视图大小。然后,您可以在项目上放置任何您想要的约束。当所有项目都在其位置时,将新视图的框架设置回x = 0和y = 0.

然后,您将按如下方式放置约束。选择新视图并固定到顶部,底部,尾部和前导,然后在容器中居中。这将产生一个垂直的约束,带有一些负数。在故事板轮廓中选择此约束并将其设置为零。

您现在可以垂直滚动。如果您有任何问题,请告诉我。

答案 1 :(得分:0)

您的问题是由于您从storyBoard将元素添加到scrollView而引起的。

在故事板中你需要:

1)添加scrollView,如果你需要在屏幕的宽度,然后将它的尾随和前导空格设置为superView为0

2)取消选中属性检查器中的“允许水平滚动”

在您的代码中

1)将scrollView's contentSize设置为您想要的大小。

1.1)在您的代码中,您需要像这样设置contentView的大小

scroller.contentSize = CGSizeMake(your width, your height);

这是非常重要的一步,如果不设置大小,scrollView将无法滚动。将scrollView视为窗口,将contentView视为视图。如果contentView与scrollView的大小相同,则scrollView无法在任何地方滚动(所有contentView都适合scrollView)为了创建滚动,您需要使contentView更大,然后滚动视图本身

2)通过调用

开始将您的元素添加到scrollView's contentView
[scroller addSubView:<your view>];

这会将您的观点添加到scrollView's contentView,并且

答案 2 :(得分:0)

我创建了一个视图应用程序,并在故事板中添加了UIScrollView,其中包含四个约束(顶部,左侧,右侧,底部)。我在viewDidLoad()中添加了以下代码。一切正常。我的图像只是垂直滚动,而不是水平滚动。无需其他设置。

enter image description here

@IBOutlet weak var scrollView: UIScrollView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Just as an example, I make a size with same with of the view
    // and twice the height of the view.
    let size = CGSizeMake(
        self.view.frame.size.width,
        self.view.frame.size.height * 2);

    // Load an image and make a image view
    let image = UIImage(named: "im.jpg")!
    let imageView = UIImageView(image: image)
    imageView.frame = CGRect(
        origin: CGPoint(x: 0, y: 0),
        size: size);
    imageView.contentMode = UIViewContentMode.ScaleToFill;

    // Add the image view to scroll view
    scrollView.addSubview(imageView)
    scrollView.contentSize = size;
}