使用自动布局将图像宽度调整为100%,同时保持纵横比

时间:2014-10-24 21:07:42

标签: ios iphone autolayout

我在理解自动布局的工作原理时遇到了问题。我的控制器场景中有以下结构:

View
   ScrollView
      View
         Image View

      Constraints
         SuperView.Bottom = View.Buttom
         SuperView.Trailing = View.Trailing
         View.Leading = SuperView.Leading
         View.Top = SuperView.Top
    Constraints
       ScrollView.Top = SuperView.TopMargin
       SuperView.TrailingMargin = ScrollView.Trailing (-16)
       ScrollView.Leading = SuperView.Leading (-16)
       BottomLayoutGuide.Top = ScrollView.Bottom (-40)

这会处理我需要的滚动视图。视图中还有其他内容,但我已经卸载了#34;他们现在首先使图像视图工作。我想让ImageView具有基于屏幕尺寸的宽度(iPhone 5将具有320px,iPhone 6+将具有1080px)。因此,我尝试向ImageView添加约束(View.Trailing = SuperView.Trailing; View.Leading = SuperView.Leading; AspectRatio - 2:1)但它只是让图像尺寸变得非常大,它没有#39甚至适合屏幕。如果我设置高度限制,它可以工作,但我不想放置高度限制,因为我希望大小不依赖于恒定的宽度/高度。

我做错了什么?我不安静地了解AutoLayout;我理解AutoLayout的基本概念,但是当涉及到实现时,我不知道该怎么做......:/

2 个答案:

答案 0 :(得分:1)

图像的大小/宽高比与图像视图的contentMode有关。适当地设置contentMode(听起来你可能想要UIViewContentModeScaleAspectFit)并将clipsToBounds设置为true,这样图像就不会比图像视图大。然后限制图像视图的大小,否则将调整大小以适合图像。更好的是,使用更像正确尺寸的图像;你显然正在使用一个巨大的图像(否则它不会被绘制得很大),这很浪费。

答案 1 :(得分:1)

要检查/尝试两件事:

  1. 加载图片后,在imageView上调用sizeToFit。这会导致它适当地更新其contentSize。
  2. 然后,在scrollView中设置zoomScale - 它可能只是显示imageView放大的方式.trainScale应该是superview.bounds.size.width / imageView.bounds.size.width其中superview是主要的viewController视图(self.view)