12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AutoLayout + SnapKit でアスペクト比固定のViewを作る

Last updated at Posted at 2018-02-18

最近、iOS の View は InterfaceBuilder を利用せずにコードで生成しています。
その際に SnapKit という OSS を利用しているのですが、 アスペクト比固定の View の生成方法にちょっと悩んだので、Tipsとして残しておきます。

InterfaceBuilderの場合

Add New Constraints から Aspect Ratio にチェックを入れればOKですよね。

スクリーンショット 2018-02-19 1.13.45.png

SnapKitの場合

横幅基準でアスペクト比固定する
aView.snp.makeConstraints { make in
    let width = 100
    let ratio = 0.5
    make.width.equalTo(width)
    make.height.equalTo(aView.snp.width).multipliedBy(ratio)
}

とまぁ、こんな感じに View の固定する方(今回は横幅)は普段通り設定し、依存する方(今回は縦幅)へ equalTo で固定する方と同じであると宣言した後に、multipliedByでその比率を入れることで実現可能でした。

ImageViewを画像にFitさせる

この考えを用いることで、画像の比率を保ったまま ImageView を AutoLayout で画像のアスペクト比を保ったままいい感じに設定することができます。

ImageViewを画像にFitさせる
imageView.snp.makeConstraints { make in
    let ratio: CGFloat = {
        let size = imageView.image!.size
        return size.height / size.width
    }()
    make.width.equalToSuperview().multipliedBy(0.8)
    make.height.equalTo(imageView.snp.width).multipliedBy(ratio)
}

これでImageViewの横幅を親Viewの0.8倍した横幅に設定し、画像のアスペクト比にImageViewをFitさせることができました。

12
6
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
12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?