iPadだとセルの表示がずれる

UITableViewに追加したカスタムスタイルセルのコンテンツ左右の余白が標準スタイルのそれよりも若干狭くて表示がずれるという現象を何とかしたお話です。

標準スタイルで構成

標準スタイルのセルを3つ追加してみました。

img20160315_1-1

これを実行するとiPhone 6、iPhone 6 Plus、iPadではこうなります。

img20160315_1-2 img20160315_1-3 img20160315_1-4

標準スタイルとカスタムスタイルの混合

さて、2行目のセルをカスタムスタイルに変更してラベルとスイッチを適当に置いてみます。

img20160315_2-1

Auto Layoutのマージン制約はXcodeのお勧めをそのまま設定します。

img20160315_2-2 img20160315_2-3

これを実行するとiPhone 6、iPhone 6 Plus、iPadではこうなります。

img20160315_2-4 img20160315_2-5 img20160315_2-6

iPhone 6 PlusとiPadでは、なぜか2行目の左右余白が少ないため、Cell 2と書かれたラベルが左に、スイッチが右に若干ずれてしまっています。iPhone 6とiPhone  6 PlusやiPadで異なる余白のシステム設定値が、カスタムセルの方にだけ正しく継承されていないようです。

カスタムスタイルの余白修正

ビューのプロパティをいじって継承されるように修正してみます。

大事なところは、セルの親ビューをたどってPreserve Superview Marginsにチェックを入れて、さらにラベルとスイッチのレイアウト制約にある親ビュー側のアイテムのRelative to marginをオンにすることです。

img20160315_3-1 img20160315_3-2 img20160315_3-3 img20160315_3-4 img20160315_3-5

これを実行するとiPhone 6、iPhone 6 Plus、iPadではこうなります。

img20160315_3-6 img20160315_3-7 img20160315_3-8

iPhone 6 Plus、iPadでの表示のずれがなくなりました。相変わらずAuto Layoutは黒魔術です。

OM-D E-M5 Mark II

お散歩&写真のお供にここ12年ぐらいずっとデジタル一眼レフのCanon EOS 20Dを使ってきましたが、大きいし重いしこれ持って出かけると疲れるしボディだって超古いしそれに去年の3月にお仕事繋がりの勢いでOlympus AIR A01のレンズキットを入手してみたらセンサーの小さいミラーレス一眼レフでも良く写るなと思いを改めつつ昨年末にヨドバシカメラでOM-Dを触ったら何かビビビと来るものあって、数週間ほど悩んであっさりと宗旨替えいたしました。

これはOM-D E-M5 Mark IIのオモチャ

これはOM-D E-M5 Mark IIのオモチャ

買ってしまいました、OM-D E-M5 Mark II。予算の都合により、とりあえずボディだけです。

ファンクションボタン多すぎてとっさの時にわからなくなるとか、カスタマイズできる機能が多すぎてメニューが複雑で最初は迷子になるとか、慣れてしまえば些細な問題はありますが、小さく軽く、そして目が悪くなってきているので高精細な電子ビューファインダーは大変助かります。iPhoneみたいにシャッター音もうるさくないですしおすし。

しばらくは、AIRについていたパンケーキズームレンズを付けて楽しむことにします。(12-40mm F2.8 PROが欲しい…)

石狩望来

石狩望来

札幌モエレ沼公園

札幌モエレ沼公園

水蒸気が多目の空だったけれど、それでもオリンパスの青は素敵。

最初のUIApplicationDidBecomeActiveNotificationが来ない

ビューコントローラで、

- (void)viewDidLoad {
    [super viewDidLoad];
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
    [notificationCenter addObserver:self selector:@selector(applicationDidBecomeActive:)
        name:UIApplicationDidBecomeActiveNotification object:nil];
}

- (void)applicationDidBecomeActive:(NSNotification *)notification {
    NSLog(@"Hello!");
}

なんて書いても、iOS 8とは異なりiOS 9では最初の画面表示の際にビューコントローラの applicationDidBecomeActive メソッドは呼び出されないようです。デバッグコンソールに Hello! は表示されないです。その後、バックグラウンドから復帰するときにはきちんと呼び出されますけども。

続きを読む

イメージビューを拡大縮小表示するサンプル

お久しぶりです。

表題の通りですが、Swiftの習作としてUIScrollView上のUIImageViewを拡大縮小表示するサンプルアプリを書いてみました。ソースコードは GitHub に置いてあります。

Swiftの更新ペースに自分の学習ペースが全然ついて行けていない…

続きを読む

PLAY OPC 1.4.2387が公開されました。

拙作 PLAY OPC 1.4.2387 が公開されました。

PLAY OPC

インターバルタイマー撮影できるようになったので、メディア残量とかバッテリー残量が尽きるまで微速度撮影とかできるんではないかと思います。(ちなみに、撮影枚数最大&時間間隔最長の設定でテストなんかしていないのは秘密です)