iOS14のUIDatePickerでやたらAutoLayoutのエラーが出てくる
iOS14でUIDatePickerが新しくなったんだけど、これをタップして選択画面を出したタイミングでAutoLayoutのエラーがもりもり出てくる。

試した環境
シミュレータの画面サイズによって出たり出なかったりするかな?と思って色々見てみたけどどれも同じだった。
コード
import UIKit class ViewController: UIViewController { let datePikcer = UIDatePicker() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white datePikcer.translatesAutoresizingMaskIntoConstraints = false view.addSubview(datePikcer) NSLayoutConstraint.activate([ datePikcer.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor), datePikcer.centerYAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerYAnchor) ]) } }
エラー
長すぎるので全体はgistに。
https://gist.github.com/ohnishiakira/02fd577c70d263186212d8c6c98423ec
一番最後の↓がなんかヒントになりそうな気はするが、解決方法は分からずじまい。
2021-02-27 20:05:29.268292+0900 DatePickerSample[4410:161030] [DatePicker] UIDatePicker 0x7ff9e6c20390 is being laid out below its minimum width of 280. This may not look like expected, especially with larger than normal font sizes.
「Effective Ruby」を買った
普段自分が手足のように使っているRubyでも知らない事がまだまだ沢山あるんだな、という事が分かって良かった。

- 作者: Peter J. Jones,arton,長尾高弘
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/09
- メディア: 大型本
- この商品を含むブログ (2件) を見る
ガッと開いたページでこの一言を見つけてしまい、すみませんでしたという気持ちになった。
Ruby初心者は
method_missingの存在を知ると、まるでぜひ使ってくれと言わんばかりの汎用ツールを見つけたとでも思うようだ。(p.115)
RubyGemsで公開されていないgemを使う
自分が作ったgemをRubyGemsにアップする前に使ってみたい、諸事情でRubyGemsでは公開されていない*1、masterブランチのものを直接使いたい、などの理由でgem installでインストールできないgemを使いたい時がある。
今回はMarkdownパーサであるqiita-markdownを使ってみたかったので、このgemをサンプルに書いている。このgemはRubygemsに公開されているので、下記に書いてあるような手順を踏まなくてもふつうにgem installでインストールできる。
ソースコードはあらかじめvendor/以下でgit cloneしてある。
bundlerを使う
Bundlerを使うのが手っ取り早い。Gemfileにgemの名前、置いてある場所を書いてbundle installするだけ。
source "https://rubygems.org" gem "qiita-markdown", path: "vendor/qiita-markdown", require: "qiita/markdown"
ソースコードの方は下記のようにrequire "bundler"してBundler.requireする。これだけでGemfileに書いてあるgemを呼び出してくれる。便利。
#!/usr/bin/env ruby require "bundler" Bundler.require # ...
bundlerを使わない
なんとなくGemfileを書くのがだるい時がある。そういう時はソースコードから直接requireして済ませる。
大抵のgemはlib以下にrequireすべき対象のファイルが置いてあるため、このlibディレクトリをRubyの$LOAD_PATHに追加したあと、通常通りrequireする。
#!/usr/bin/env ruby $LOAD_PATH.unshift File.expand_path "vendor/qiita-markdown/lib" require "qiita-markdown" # ...
*1:社内だけで使っているgemなので公開できないなど