LoginSignup
8
12

More than 5 years have passed since last update.

画像を横幅ぴったりで上揃えに配置する方法

Last updated at Posted at 2016-04-06

UIImageViewを使ってこの配置をググっても全然出てこなかったので紹介します。

設定した画像の縦横比に自然にフィットするUIImageViewを実装する

まず、UIImageViewを継承して簡単に拡張したStretchImageViewを作ります。StretchImageViewはAutoLayoutで特に指定がない場合に、自然に見える縦横比・高さに勝手になってくれるImageViewです。

class StretchImageView: UIImageView {
    override func sizeThatFits(size: CGSize) -> CGSize {
        guard let image = self.image else {
            return super.sizeThatFits(size)
        }

        let newHeight = size.width * (image.size.height / image.size.width)
        return CGSizeMake(size.width, newHeight)
    }

    override func intrinsicContentSize() -> CGSize {
        return sizeThatFits(bounds.size)
    }
}

このように、sizeThatFitsintrinsicContentSizeの出力に設定された画像のアスペクト比を反映してあげるだけで実現できます。

上部のみの表示

あとは、用意したStretchImageViewの上部のみが表示されるように配置します。表示したい領域にUIViewを配置し、その中にStretchImageViewを配置します。
配置したStretchImageViewには以下のようなconstraintを貼ります。

  • superview.top = view.top
  • superview.left = view.left
  • superview.right = view.right
  • superview.bottom <= view.bottom

Bottomは明確には指定していないけれども、StretchImageViewが勝手に高さを決めてくれます。

様子

ImageViewのClassとしてStretchImageViewを設定しましょう。
スクリーンショット 2016-04-06 10.16.35.png

Constraintはこんな感じ
スクリーンショット 2016-04-06 10.15.24.png

実行の様子
スクリーンショット 2016-04-06 10.14.15.png

8
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
12