web-dev-qa-db-ja.com

カスタムUITableViewCell内の水平UIScrollView-IB Storyboardを使用-スクロールしない

主な目標は、各行のコンテンツを水平にスクロールできるようにすることです。

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

問題は単純なようですが、何時間も検索を行った後、多少似ているがプログラムのみのアプローチを使用した1つの問題以外は何も得られませんでした ここを参照

IBでは、下のデザインに示すような構造になっています。 View structure

  • スクロールビューのコンテンツサイズは、IBとコードの両方で{5000、500}に設定されています
  • スクロールビューフレームは{0,0} {320,44}です
  • ラベルフレームは{20,0} {500,44}に設定されています

githubリポジトリ内のサンプルプロジェクト も提供しています。この例には、uitableviewcellの外部で動作する「通常の」スクロールビューも含まれています。

とても基本的なことを見落としたと言ってください。

17
marco alves

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

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

ここで、UIImageViewに制約を追加しない場合、その固有のContentSizeサイズが使用されます。

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

autolayout constraints

セルのコンテンツビューにも制約がなかったことに注意してください。

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

6
Alexis

これの別の代替方法は、カスタムUITableViewCell内でUICollectionViewを使用することです

8
marco alves

私も同じ問題を抱えており、scrollviewのコンテンツビューを削除して再度追加すると機能することがわかりました。

- (void)viewDidLoad
{
    [super viewDidLoad];

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

これは最もエレガントなソリューションではありませんが、私にとってはうまくいきます。

2
steffenhk

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

1
Yimin Rong

私のxCode 4では、Storyboardにアクセスできません。

まず、UITableViewViewControllerに接続する必要があります。 UITableViewCellUITableViewの中にあります。そのため、UITableViewの設定を変更する必要があります。接続後、次のようにcontentinsetUITableViewを変更してみてください。

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

これが機能しない場合は、TableViewのコンテンツサイズを変更してみることもできます。動作する前にUIViewのサイズを変更する必要があるかもしれません。

0
Alex Cio

新しいautolayoutモードにより、iOS 7は、UIScrollViewを使用する多くのiOS 6以前のアプリを壊してしまったようです。私は最近同様の質問を投稿しました[モデレーターによって保留にされているため、表示できない可能性があります]ここで、ユーザーLv.BeLeCkは次を使用して成功を見つけました:

self.automaticallyAdjustsScrollViewInsets = NO;

スクロールビューを保持しているビューコントローラで。スクロールビューのインスタンス化の後に置くだけです。それが機能するかどうかを確認し、機能する場合は、彼の貢献に賛成票を投じてください。

根本的な原因は、インスタンス化時にUIScrollViewsが現在のコンテンツに基づいてサイズを更新していることです。

なぜAppleわからないことを考えたかったのです。複数行のラベルの上部と下部の配置をまだ待っています!

0
Yimin Rong

IBで状況を修正します。

「ID値セクション-ユーザー定義ランタイム属性」内の同じ値をキー「フレーム-長方形-CGRectValue」と「サイズインスペクター-ビュー値」に等しくする必要があります。

これがお役に立てば幸いです。

0
Beto

今日も同じ問題があります。数時間探し続けた後、セルの選択を[なし]から[デフォルト]に戻すことで解決します。それが他の人を助けることを願っています。

0
Horst