38
16

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 1 year has passed since last update.

SwiftUIでborderの角を丸くする方法(cornerRadius)

Last updated at Posted at 2020-09-20

はじめに :qiitan:

どうもSwiftUI大好きエンジニアです :hushed:
今回ご紹介するSwiftUI tipsはborderの角を丸くする方法です。
簡単なのですが、ちょっと素直にできなかったのでメモとして残しておきます :baby_chick:

実行環境: Xcode12 iOS14

素直に実装してみる :dog2:

サンプルのView

struct ContentView: View {
    var body: some View {
        Text("マリオ")
            .font(.largeTitle)
            .bold()
            .padding()
    }
}

スクリーンショット 2020-09-20 1.14.51.png

マリオさんです。

borderを単純につけてみる

struct ContentView: View {
    var body: some View {
        Text("マリオ")
            .font(.largeTitle)
            .bold()
            .padding()
            .border(Color.red, width: 4)
    }
}

スクリーンショット 2020-09-20 1.18.29.png

だいぶ角が尖っています。荒々しいですね :baby:

borderを丸めてみたい(失敗)

struct ContentView: View {
    var body: some View {
        Text("マリオ")
            .font(.largeTitle)
            .bold()
            .padding()
            .border(Color.red, width: 4)
            .cornerRadius(16) // ← failure
    }
}

スクリーンショット 2020-09-20 1.22.25.png

borderごと削られてしまいました :anguished:

角を丸める(結論) :pear:

以下のようにRoundedRectangleoverlayしましてoverlayしたRoundedRectangleをstrokeメソッドを使ってborderにするとborderに角を丸くすることができます。

struct ContentView: View {
    var body: some View {
        Text("マリオ")
            .font(.largeTitle)
            .bold()
            .padding()
//            .border(Color.red, width: 4) 削除する
            .overlay(
                RoundedRectangle(cornerRadius: 16)
                    .stroke(Color.red, lineWidth: 4)
            )
    }
}

スクリーンショット 2020-09-20 1.28.55.png
だいぶ角が取れて丸くなりましたね、もう怖くないです!

結論 :closed_book:

borderの角を丸くしたい場合はborderを使わない

余談 :wastebasket:

Xcode11 beta6までは以下のようにborderメソッドでcornerRadiusを指定することができていたようですが、なぜかdeprecatedになったみたいです。
どうしてですかね?知っている方教えてください :bow:

.border(Color.purple, width: 5, cornerRadius: 20)

以下のように実装すると点線とかにできて面白いです :laughing:

struct ContentView: View {
    var body: some View {
        Text("マリオ")
            .font(.largeTitle)
            .bold()
            .padding()
            .overlay(
                RoundedRectangle(cornerRadius: 16)
                    .stroke(Color.red, style: StrokeStyle(lineWidth: 4, dash: [8]))
            )
    }
}

スクリーンショット 2020-09-20 2.04.56.png

参考 :bow_tone1:

SwiftUI Tip: Drawing a Border with Rounded Corners for Buttons and Text

宣伝

SwiftUIで作ったアプリをたくさん公開しているので是非使ってみてください!
https://apps.apple.com/jp/developer/ryo-tsudukihashi/id1320583602?l
ツイッターやってますので、是非フォローしてください
https://twitter.com/tsuzuki817

38
16
1

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
38
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?