2009-05-17 12 views
3

UiTableViewは、横向きのスクロールを横向きモードで提供しません。UITableViewをTransformで回転させ、Interface Builderで正しく回転させる

私のUITableViewがフルスクリーンではありません(私のコンテンツを回転させながら、だから私はちょうどそれを水平モードを使用することはできません、絵である)

私はそれがトランスフォームを使用して、私のUITableViewを回転することが判明..私はインターフェイスでそれを配置する必要がありますいくつかの奇妙な位置にビルダーが回転すると、それはちょうど右に見えます.....

Interface Builderを使いこなす人はいませんか?同じコードですか?

答えて

3

AppleのサイトのWindows and Views概念ガイドの「自動サイズ調整の動作」のセクションを参照してください。これは、Interface Builderを使用せずに複雑な変換を手動で実装することなく、ポートレートからランドスケープへの自動ローテーションを達成し、また戻す方法を説明しています。

カスタムコンテンツを回転させるとスクロールを無効にするよう

shouldAutorotateToInterfaceOrientation:interfaceOrientationを参照してください、willRotateToInterfaceOrientation:duration:、およびUIViewControllerdidRotateFromInterfaceOrientation:。これらのメソッドを実装して、回転イベントを傍受し、移動する方向を確認し、カスタム図面とプロパティを設定することができます。

編集

あなたのコメントを受けて、私はTable View Programming Guideから、アップルからこのビットを見つけた:

のUITableViewは大きなコンテンツ とビューの スクロール動作を定義する UIScrollViewの、から継承ウィンドウのサイズよりも大きくなります。 UITableViewは、スクロール の動作を再定義して、垂直スクロールを許可します のみ。

おそらくAppleは彼らのヒューマンインターフェイスガイドラインに反対するテーブルビューの水平スクロールをみなしています。 UITableViewをサブクラス化すれば、スクロールの振る舞いを再定義できるかどうかは疑問ですが、それはおそらく試行錯誤の作業の大部分を占めるでしょう。実際にこれを達成することができれば、ここにいる多くの人があなたのやり方に興味を持っていると確信しています。他の人の解決策を見つけようとしばらく探していたが、何も見つけられなかった。

また、実際にはHIGを壊していると仮定して、アプリはアプリストアにアプリを許可しないことがあります。

+0

感謝しますが述べたように、のUITableViewは横長モードで水平方向のスクロールを提供していません。したがって、私がオートローテーションを使用した場合は、上下にスクロールするだけでなく、左には<->右にスクロールします。 – user82383

1

あなたは以下のようにして、あなたが探しているものを達成することができます:

  1. をのUITableViewを作成し、コードまたはIBのいずれかを介して、のUIViewControllerに添付(のUITableViewControllerを使用しないでください)
  2. 適用あなたのテーブルに反時計回りに90度変換されます。
  3. tableView:cellForRowAtIndexPath:メソッドで、時計回りの90度の変換をセルに適用してから戻します。

ボーム!垂直型のセルを持つ水平スクロールテーブルが作成されました。セルとテーブルの幅と高さを修正して、すべてを見栄えにする必要があるかもしれませんが、これが役立つと思います。

もう1つのヒント:テーブルのレイヤーを使用して回転の中心点を制御できます。 anchorPointプロパティ(CGPoint)です。ビュー境界の中心以外の場所に設定した場合、回転効果(および他のエフェクト)はその点を参照として使用します。

+0

私はこれを試して、正しく戻ってポートレートにテーブルビューを回転させるように見えることはできません。肖像画から風景に回転すると、私は彼らが必要とするように細胞を調整することができます。ただし、テーブルビューは縦向きで横向きにスクロールしません。何かご意見は? –

0

私はそれが少し遅れていることを知っていますが、ここに私の答えです。

Horizo​​ntal Scrollingを実現するには、テーブルビューに90度の変換を適用する必要があります。しかし、奇妙なフレームのバグを取り除くには、変換の前にフレームを取得し、変換を適用してフレームを元のフレームに復元する必要があります。



// Save the tableview frame (as it is layed out in IB) 
CGRect oldframe = tableview.frame; 

// Apply the transform 
tableview.transform=CGAffineTransformMakeRotation(M_PI/2); 

// For some weird reason, the frame of the table also gets rotated, so you must restore the 
//original frame  
tableview.frame = oldframe; 


+1

M_PIを分割する代わりに 'M_PI_2'を使います。 –

4

[OK]を、問題は、テーブルビューの幅が柔軟であるため、回転後(高さ実際の場合)セルの幅が過度に増加したということでした。私はのUITableViewをサブクラス化し、layoutSubviewsメソッドをオーバーライドすることで、問題を克服し、それは次のようになります。あなたの答えのための

- (void)layoutSubviews { 

    [super layoutSubviews]; 

    for (UIView* child in [self subviews]) { 

     CGRect frame1 = child.frame; 
     if ([child isKindOfClass:[UITableViewCell class]]) { 
      frame1.size.width = 120; 
      child.frame = frame1;   
     } 
    } 

} 
関連する問題