LoginSignup
5
3

More than 5 years have passed since last update.

iOS10.3で取り消し線が消える症状と回避策

Posted at

iOS10.3でNSAttributedStringによる 取り消し線属性(NSStrikethroughStyleAttributeName)が機能しなくなる症状に出くわしたので、その内容ととその対処法についてまとめます。

  • 取り消し線の適用範囲が全部の文字列であれば再現しない
  • 特定文字列のみ取り消し線を適用すると再現  
    • こういうやつですね。ほげほげ

NSBaselineOffsetAttributeName を追加付与で回避

NSStrikethroughStyleAttributeName , How to strike out the string in iOS 10.3?

↑の記事の最後の方に書いてある方法を自分は参考にしました。
NSBaselineOffsetAttributeNameを追加付与してたところ再現しなくなりました。値は0にしてます。

採用理由

できれば、出くわした箇所がそもそも別々のUILabelにしたほうが良いデザインだったにも関わらず、無理やり1行でこと済ませて箇所だったので分けたかったのですが、リリース直後ということもあり手軽さ重視で↑を選びました。

しかし今度は iOS8 で再現

シミュレータですが調べました。
Sim: シミュレータ
有り: NSBaselineOffsetAttributeName属性の追加付与
無し: NSBaselineOffsetAttributeName属性の付与なし

iOS Sim/実機 有り 無し
8.1 実機 非表示になる 表示される
8.2 Sim 影響受けず 影響受けず
8.3 Sim 影響受けず 影響受けず
8.4 Sim 影響受けず 影響受けず
9.0 Sim 影響受けず 影響受けず
9.3 Sim 影響受けず 影響受けず
10.0 Sim 影響受けず 影響受けず
10.2 実機 影響受けず 影響受けず
10.3 実機 表示される 非表示になる

最終的にはバージョンで処理分離

OSによって処理分岐はしたくなかったのですが、そもそも上にも書いたとおり別の在るべき形があり、落ち着いたタイミングでUILabelを2つに分けるので許容しました。

5
3
0

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
5
3