その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

SLComposeViewController が iOS 7 で表示を勝手にキャンセルする問題の対処法

iOS7 で SLComposeViewController を表示しようとすると、すぐに completionHandler が実行されてしまい、表示できない、という問題の対処法です。


ググっても同じ問題で困っている人が見当たらなかったので、すごくニッチな話かもしれません。。 *1

状況

SLComposeViewControllerCompletionHandler の引数に入ってくる result の値を見てみると、SLComposeViewControllerResultCancelled が返ってきていました。


そもそもまだ SLComposeViewController が表示されてない状況なので、誰もキャンセルなんてしていないのに。


あと、いろいろな iOS7 プロジェクトで試してみましたが、どのアプリでも発生するわけではなく、問題なく表示される場合がほとんどでした。

対処法

UIAppearance で、UIBarButtonItem に対してバックボタンのタイトルの位置調整を行っている場合に、この問題が発生していることがわかりました。

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-10, -200) forBarMetrics:UIBarMetricsDefault];


なので、上記処理をやめるとか、iOS6 以下の場合だけ実行するようにするとか。



ちなみに、あらゆる UIAppearance について調べたわけじゃないので、他にも SLComposeViewController が表示を勝手にキャンセル要因となるようなものがあるかもしれません


また UIAppearance 以外にもそういった要因になるものがあるかもしれません。


*1:あのStackOverflowにも見当たらなかった