2013-10-04 11 views
16

主な目標は、各行のコンテンツを水平方向にスクロールできることです。カスタムUITableViewCell内の水平UIScrollView - IBストーリーボードの使用 - スクロールなし

私はこれをXコード5とStoryBoardを使用して実行しようとしています。

問題は単純だと思われますが、何時間もの検索の後には、やや似ていますが、プログラムのみのアプローチsee hereを使用する以外は何も得られません。

IBでは、私は以下の設計に示すような構造を持っています。 View structure

  • scrollviewフレームは{0,0} {320,44}
  • ザIBおよびコードの両方集合{5000、500}のセットにおけるscrollviewのコンテンツサイズラベルフレームは{20,0} {500,44}に設定されています

私はexample project in a github repositoryも提供しています。この例には、uitableviewcellの外で動作する「通常の」スクロールビューも含まれています。

私は非常に基本的なものを見落としたと言います。私はあなたのStoryboardにアクセスすることはできません

+0

iOS6または7ですか? –

+0

これはios 7にあります。 –

+0

解決策は見つかりましたか?私は似たような状況です。私のscrollviewはUIViewController内部で完璧に動作しますが、内部にUITableViewCellを置くとシンプルが機能しません。私はXcode 5とiOS 7で動作します。 – Beto

答えて

6

あなたのストーリーボードでは、Autolayoutが有効になっています(それは良いことです)。 UIScrollViewのスクロール可能なサイズは、そのサブビューの制約に基づいて計算されます。

UIScrollView内のUIImageViewに「スーパービューの先頭、下位、先頭、末尾のスペース」を追加する必要があります。これらはすべて0に設定できます。

UIImageViewに制約を追加しないと、そのintrinsicContentSizeサイズが使用されます。また、あなたのセルのコンテンツビューに制約を欠落していた

autolayout constraints

注:

あなたの制約は、次のようになります。

制約が終了したら、コードからすべてのsetContentSize:を削除します。

+0

これは私のために働いたが、イメージビューではなくスクロールビューでUIViewを使用しているため、UIViewで高さと幅の制​​約を設定する必要がありました。 – dmzza

0

、私のXcodeのすべての4

まずで、あなたのViewControllerUITableViewを接続する必要があります。 UITableViewCellはあなたのUITableViewの中にあります。それであなたのUITableViewの設定を変更しようとするべきです。これが機能しない場合、また、あなたのテーブルビューのコンテンツサイズを変更しようとすることができ

[self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 2500, 2500)]; 

:接続した後、あなたはこのようなあなたのUITableViewcontentinsetを変更しようとすべきです。たぶん、あなたはあなたのUIViewのサイズを変更する必要があります。

+0

あなたの答えはあまりありません。あなたがスクロールビューの中にテーブルビューを挿入するケースについて話しているようですが、これは私が求めているケースではありません。 –

+0

次にxcode 5をインストールしてください – Alexis

1

新しい自動レイアウトモードでは、iOS 7では、UIScrollViewを使用する多くのiOS 6以前のアプリケーションが壊れているようです。

self.automaticallyAdjustsScrollViewInsets = NO; 

ビューコントローラにscrollviewを保持:ユーザーLv.BeLeCkが使用して成功を収めている - 私は[あなたがそれを見ることができない場合があります今すぐモデレーターによって保留] 最近同様の質問を投稿しました。スクロールビューのインスタンス化の後に置くだけです。それが機能するかどうかを確認してください。もしそうなら、彼の貢献をupvoteしてください。

インスタンス化時に、UIScrollViewsは現在地獄だけを残していた前とは異なり、現在の内容に基づいてサイズを更新しているという根本的な原因があると思います。

Appleがなぜ私はそれを知りたくなかったのですか?私はまだ複数行ラベルのトップとボトムの位置合わせを待っています!

+1

それは動作していないようです。 uitablecellviewの中にスクロールビューがあるかどうかは疑問です。 –

1

setContentSizeviewDidLayoutSubviewsで、scrollViewDidEndZooming:withView:atScale:で呼び出されていることを確認してください。 iOS6では、これらのメソッドにコードがない場合、デフォルトの動作は正常に機能しました。新しいレイアウトシステムのiOS7ではが必要ですです。セットアップのために複数回呼び出される場合があります。setContentSizeを呼び出してください。

+0

Thanks Yimin。実際には、アプリの機能が変更されたので、今私はこれを必要としません。それにもかかわらず、私はgithubコードにあなたの提案を試みて、それがどのように進むのか見ていきます。私はうまく結果をすぐにここに戻ってきます。 –

+0

@Yimin上記のメソッドが 'viewDidLayoutSubviews'に置かれる必要があることを示すドキュメンテーションにリンクしてください。 – RaffAl

+0

@reecon - 私は、SOに関する多くのコメントを見直して結論に達しました。例えばhttp:// stackoverflow。co.jp/questions/13439304/uiscrollview-setcontentsize-breaks-view-with-auto-layoutをご覧ください。執筆の時点で、これは事実でした。多分今は違うかもしれません。 –

2

私は同じ問題を抱えていた、とscrollviewのコンテンツのビューを削除し、それを追加すると再び動作することがわかった:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.label removeFromSuperview]; 
    [self.scrollView addSubview:self.label]; 
    self.scrollView.contentSize = self.label.frame.size; 
} 

それは最もエレガントな解決策ではないのですが、それは私のために動作します。

0

私はIBを通じて状況を修正しました。

"IDインスペクタ - ビュー値"に等しいキー "frame-Rect-CGRectValue"を持つ "ID値セクション - ユーザー定義のランタイムアトリビュート"内に同じ値を設定する必要があります。

私はこれがあなたに役立つことを願っています。

0

私は今日同じ問題を抱えています。 数時間を見つけたら、セルの選択をNoneからDefaultに戻して解決します。 他の人に役立つことを願っています。

8

カスタムUITableViewCell内でUICollectionViewを使用することもできます。

+1

ええ。チュートリアルの後に役立つかもしれません。 https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell/ –

関連する問題