UIWindowベースの昔のアプリが、最新のxcodeでレイアウト崩れを起こす対策
iOS8.0とか、その頃に作ったiOSアプリが、xcode11とiOS13の環境で、おそろしくレイアウト崩れしたりします・・・orz
レイアウト崩れの原因はそれぞれかも知れませんが、
筆者の場合は、スクリーンのheightと、UIWindowのheightがなぜか大幅に違っていることが原因でした。
以前は、iOS側で、自動的に縦幅の調整をしてくれていたようですが、
自動調整の方法が変わったのでしょうね。
NSLog("%f", [UIScreen mainScreen].bounds.size.height);
の値と、
NSLog("%f", windows.bounds.size.height);
とかの、メインウインドウの縦幅の値が違うのが原因で、
レイアウト崩れしてしまっている場合の対策です。
古いアプリ用なので、Objective-Cで書きますw
こんな感じで、UIScreen mainScreenのwidth、heightと、
メインウインドウのwidth、heightを、同じにしてあげればOKです。
レイアウト崩れの原因はそれぞれかも知れませんが、
筆者の場合は、スクリーンのheightと、UIWindowのheightがなぜか大幅に違っていることが原因でした。
以前は、iOS側で、自動的に縦幅の調整をしてくれていたようですが、
自動調整の方法が変わったのでしょうね。
NSLog("%f", [UIScreen mainScreen].bounds.size.height);
の値と、
NSLog("%f", windows.bounds.size.height);
とかの、メインウインドウの縦幅の値が違うのが原因で、
レイアウト崩れしてしまっている場合の対策です。
古いアプリ用なので、Objective-Cで書きますw
[window setFrame: CGRectMake(0, heightPadding, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
こんな感じで、UIScreen mainScreenのwidth、heightと、
メインウインドウのwidth、heightを、同じにしてあげればOKです。
最初に記事を書いた日:2019/10/25