iPadでUISplitViewControllerのときDetailViewの中身がscroolViewのとき位置や大きさを変える

2013年8月9日金曜日

iPad

t f B! P L



 iPadでUISplitViewControllerのときDetailViewの中身が全面scrollViewの場合、位置がおかしくなりました。

 viewに直接置いてある場合は、縦横色々場所をかえても大丈夫なようですが、スクロールビューは連動してかわらないようです。

 色々調べていましたが、どうもうまい答えがない。フレームが色々あって頭が混乱して1日半ぐらい時間をかけてしまいました。
 Storyboardでスプリットを使う(Master-Detail)と、横向きが基本になります。なのでまずは viewDidload で処理をします。scrollViewのcontentSizeは画面より長めにしておきます(そうしないとスクロールがおきないから???)

viewDidload
 まず自分のviewのフレームを取得。これは縦横動かすとき勝手に連動して変わります。次にスクロールのフレーム、

    CGRect viewFrame = self.view.frame;
    CGRect scrollViewFrame = self.scrollView.frame;

 iPadで向きが縦か判定したら、フレームを変更します。

    scrollViewFrame = CGRectMake(0.0f, 0.0f,viewFrame.size.width,viewFrame.size.height);
    self.scrollView.frame = scrollViewFrame;
    self.scrollView.contentSize = CGSizeMake(viewFrame.size.width , viewFrame.size.height * 2);

 CGRectは参照ではないので、最後にもう一度入れ直さないとだめです。ということは、いちいちCGRrectにいれなくても良いのかしら? そこらへんまだよくわかっていません。

willAnimateRotationToInterfaceOrientation:duration
 向きを変えたときには、縦になっても横になっても同じことをします。たてよこの判定は関係なくviewのframeにあわせるようにします(上の5行)


 わかってしまうと「なーんだ」なのですが。私はwillHideViewControllerとwillShowViewControllerのほうでやるのかと思ってしばし遠回りしました。

 そもそも、DetailViewの中身が全面scrollだからこうなるのです。項目が少なかったらスクロールは必要ないですね。しかし横向きでキーボードがでたらすぐに隠れてしまうので、スクロールビューや、viewの位置をキーボード分移動する?など対策が必要そうです。

 面積が広いTextViewにキーボードを出したときは、TextViewのサイズをぎゅっと縮めたりのばしたり、ということをしたことがあるのですが、いまもそういう方法なのでしょうか。

このブログを検索

QooQ