繁体   English   中英

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

[英]Using auto layout to resize image width to 100% while keeping the aspect ratio

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

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)

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

我究竟做错了什么? 我不太了解AutoLayout。 我了解AutoLayout的基本概念,但是当涉及到实现时,我不知道该怎么做...:/

图像的尺寸/纵横比与图像视图的contentMode 适当地设置contentMode (听起来您可能想要UIViewContentModeScaleAspectFit ),并将clipsToBounds设置为true,以使图像不会大于图像视图。 然后限制图像视图的大小,否则将调整其大小以适合图像。 更好的是,使用更合适尺寸的图像。 您显然正在使用巨大的图像(否则将不会被绘制成巨大的图像),这很浪费。

要检查/尝试的两件事:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM