Xcode 11.2 で Storyboard か xib で UITextView を使っていると iOS 13.2 より前のバージョンでクラッシュするという凶悪なバグが発生している。 実際にクラッシュを起こしてみると以下の様に _UITextLayoutView ってクラスは無いとエラーメッセージが表示された。 *** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named _UITextLayoutView because no class named _UITextLayoutView was found; the class needs to be defined in source co
個人アプリをダークモード対応したので、その具体的な実装の流れとtipsについてまとめました。 ※すでにDark Modeの概要や実装については知っている前提です。まだの方は文末の参考記事をご参照ください Color Setを活用する 基本的にはハードコードしていた色指定をDynamic Colorに置き換える作業になります。 今まで色の指定はコードで定義していたのですが、ダークモード対応をきっかけにAssets CatalogのColor Set(iOS11~)に移行しました。 Color Setのメリットは以下のとおりです。 Storyboard Xib, codeで色が使える Light, Darkの色指定が可能 ちなみにiOS13SDKのUIKitにプリセットされてるUI Element Colors (.systemBackgroundColorなど)も指定できます Asset C
はじめに こんにちは。 最近生後7ヶ月の娘を見た人から「眉毛が垂れててお父さんそっくりですね〜」と言われるのが定番になっている加藤です。 さて、今回はSwiftのDIフレームワークであるSwinjectの話です。 DIとは DIはDependency Injectionの略で、日本語では「依存性の注入」と訳されます。 「DIとは何か」を説明した記事は山ほどありますが、ここでは一番端的に表現している記事を見つけたので引用します。 “依存性注入とはインスタンス変数にオブジェクトを与えるということです。本当にただそれだけです。” - James Shore Swiftにおける現実的なモックより引用。 つまり、あるオブジェクトが依存しているオブジェクトを外から渡してあげることを意味します。 依存しているオブジェクトを中で作らずに外から渡してあげることで、オブジェクト同士を柔軟に組み合わせることが可
次に示すような見出しと各カラムが右寄せ、ラベルの文字数によってカラムの幅が伸縮し、広くなった場合は隣の列を押し出し、短くなった場合は少なくとも見出しの幅に収まり、各列の間には一定のマージンを置くというテーブルレイアウトを、静的なAuto Layoutの制約だけで作ることを考えます。 このような、UIコンポーネントが持つコンテンツの大きさによって隣接するコンポーネントを押し出すような場面ではAuto Layoutがとても効果的に働きます。 Auto Layoutなしで実現しようとすると、列ごとの各行の文字幅を計算し、最大の幅に合わせて再配置する、という処理をコンテンツが変わるたびに行うということになりますが、Auto Layoutの制約を使用する場合ではそもそもレイアウトの再計算を自分でやる必要はないので、コンテンツの変わったタイミングなどを気にする必要はありません。 ただデータを再代入する
Aug 12, 2018 少し前に、自分のStoryboardの使い方をツイートしたら割と反応があったので、改めてまとめてみようと思います。これまで何年かiOSアプリの開発をしてきて、Storyboardとの付き合い方は何度も変わりました。なので、今回紹介するものはあくまで2018年現在のもので、来年には変わっているかもしれません。 説明のイメージを掴みやすくするため、画面の例を用意しました。左が編集時のStoryboardで、右が実行時のiOSシミュレーターです。具体的なトピックが出た時に、この例を説明に使うことがあります。 記事の最後にこれが動作するサンプルコードも用意しましたので、興味があればどうぞ。 Storyboardを使う目的 以下の2つを重視して、Storyboardを選択しています。 動作確認に掛かる時間を短縮する 成果物の構造を把握しやすくする ただし、Storyboar
Aug 12, 2018 少し前に、自分のStoryboardの使い方をツイートしたら割と反応があったので、改めてまとめてみようと思います。これまで何年かiOSアプリの開発をしてきて、Storyboardとの付き合い方は何度も変わりました。なので、今回紹介するものはあくまで2018年現在のもので、来年には変わっているかもしれません。 説明のイメージを掴みやすくするため、画面の例を用意しました。左が編集時のStoryboardで、右が実行時のiOSシミュレーターです。具体的なトピックが出た時に、この例を説明に使うことがあります。 記事の最後にこれが動作するサンプルコードも用意しましたので、興味があればどうぞ。 Storyboardを使う目的 以下の2つを重視して、Storyboardを選択しています。 動作確認に掛かる時間を短縮する 成果物の構造を把握しやすくする ただし、Storyboar
更新情報 2018/7/1:基本サンプルにAVSpeechSynthesizerSample、HomeScreenQuickActionsSample、PeekAndPopSampleを追加。 2019/9/23:全サンプルをXCode10.3、Swift5に対応 はじめに カスタムセルを使ったCollectionViewの表示、手を止めずに作れますか? TableViewCellを伸び縮みさせたり、視覚効果を与えたりする、、、何も調べずに作れますか?? おそらく開発業務に携わっているほとんどの方は(僕を含めて)新規に何かを作成する場合にネットで該当するサンプルコードを探していると思います。 そしてサンプルを探すことに時間がかかり、「調べる時間 > 作る時間」の状態になっているのではないでしょうか。 ならば「あるある」な画面や機能のサンプル一式を実行確認できる状態にして全体共有しておけば開
やること SwiftでStoryboardを使った画面遷移を行う とりあえず簡単な画面遷移ということで、画面遷移前に入力チェックをして、次の画面に値を受け渡し、画面遷移先で受け取った値を表示する 開発環境 Xcode 8 Swift 3 プロジェクト構成 今回編集したのは、以下の3ファイル Main.storyboard FirstViewController.swift SecondViewController.swift Storyboardの設定 UIViewControllerを2つ作成し、それぞれ後述するFirstViewController、SecondViewControllerと紐づける FirstViewControllerには以下の3つのコントロールを配置 挨拶を選択する Picker View 挨拶をする人の名前を入力する Text Field 次の画面へ遷移する B
iOSアプリで使うボタン。画像で作ると様々なサイズが必要だったり、容量も増えるし、デバイスによって幅を広げたりする際には管理が面倒です。できれば、今風のボタンをXcodeだけで作れればいいと思いませんか? 例えば、以下のようなUIButtonをStoryBoard上の設定だけで作れるようにします。通常、UIButtonの背景色、文字色まではStoryBoardで設定できますが、角丸、ボーダーの幅、ボーダーの色はコードでしか設定できません。 IB_DESIGNABLEを使えば、StoryBoard上でこれらの設定を自由にカスタムできるようになります。StoryBoard上で見た目を整形して確認するほうが、コードで設定するよりもやりやすいですね。 上のように新しく設定項目をIB上に追加できます。それでは、これらの追加方法を見ていきましょう。 1.カスタムクラスを作るまず、新しくクラスファイルを
Xcode の Storyboard で Scroll View(UIScrollView)を使おうとしたところ、Scroll View に対する AutoLayout の設定が難しくてちょっとはまったので備忘録メモです。Constraints(制約)の警告が消えなかったり、ビルドしたらスクロールしなかったりと、色々試行錯誤してしまいました。 以下のエントリー等のおかげで解決できました。ありがとうございます。 【UIScrollView × Autolayout 問題】Appleエンジニア直伝のファイナルアンサー – Over&Out その後 iOS: How To Make AutoLayout Work On A ScrollView UIScrollView and Autolayout – Xcode 6 – YouTube 3番目 Youtube リンク先が、Xcode での操作
【問題】 標題どおり、NavigationControllerで、ScrollViewを使用するとなぞの空白に悩まされました。 1.プロジェクトを作成して、NavigationBarを設定する 通常通り、新規プロジェクトを作成して、NavigationControllerを設定する。 「Main.storyboard」を選択して、メニューの「Editor」>「Embed In」>「Navigation Controller」を選択する。 Navigation Controllerが追加されたことを確認する。 2.ScrollViewを配置する ScrollViewをView一杯に配置して、実行結果が分かりやすいように、背景色も変えておく。 こんな感じ。 AutoLayoutを設定する。 ScrollViewを選択して、Pin制約を設定する。 からの 「Add 4 Constraints」を
はじめに 本記事では ContainerView の簡単な使い方を解説します。 ContainerView とは ContainerView とは一言で言うと「ViewController の中に ViewController を配置する」ことができるものです。ContainerView 登場以前は、1画面に付き1つの ViewController というルールでしたが、ContainerView を使うことで複数の ViewController を1つの画面内に存在させることが可能になります。 ContainerView を使うことで何が嬉しいか? ContainerView を使うことで何が嬉しいかですが、以下の様なメリットがあると考えます。特に画面が広い iPad で恩恵を受けやすいと思います。 複数の画面で View (とロジック) の再利用がしやすくなる 分散させることで1つの
UIButtonに角丸や枠線の色を変えたい場合に、コードからではなくユーティリティエリアから設定したい。 StoryBoardですぐ確認したい。 UIButtonのサブクラスを作る @IBDesignable class RoundedButton: UIButton { @IBInspectable var cornerRadius: CGFloat = 0.0 @IBInspectable var borderWidth: CGFloat = 0.0 @IBInspectable var borderColor: UIColor = UIColor.clear override func draw(_ rect: CGRect) { layer.cornerRadius = cornerRadius layer.borderWidth = borderWidth layer.borde
こんにちは、プログラマーの@Yuuです。 前回の記事([Swift]初心者向け!Segueを使った画面遷移方法)で、Segueを使った画面遷移の方法をご紹介しました。 今回はSegueを使って画面遷移をする際に、値を次の画面に受け渡す方法をご紹介します。 また、遷移先が複数の画面である事を想定して説明します。 Segueを使った画面間の値渡し 今回は最終的に以下のような画面構成にします。 SecondとThirdがあるのに、Firstがないのは気にしない方向で・・ ( ºωº ) この記事でのゴールは1番最初のViewControllerに変数を2つ用意し、その値をSecondViewControllerとThirdViewControllerそれぞれに渡してUILabelに表示する、というのを目標にします。 変数a・変数bていうネーミングセンスのなさも気にしない方向で・・ ( ºωº )
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く