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のサイズをぎゅっと縮めたりのばしたり、ということをしたことがあるのですが、いまもそういう方法なのでしょうか。
0 件のコメント:
コメントを投稿