18

UIRefreshControl内部の myを使用しようとしていますが、UITableViewControllerそれ自体が の内部にありUINavigationController、そのhidesNavigationBarプロパティが に設定されていますNO(したがって、ナビゲーション バーが表示されます)。

UIRefreshControl機能しますが、 によって隠されていUINavigationBarます。この問題に遭遇した人が他にいないことに驚いています。

関連する可能性のあるポイント:

  • my のをrootViewControllermyに設定しました。UIWindowUINavigationController
  • のプロパティを設定して、の初期ビュー コントローラをUINavigationController設定します。viewControllersUINavigationController
  • 私のUITableViewControllerサブクラスは nib でインスタンス化されています。
  • サブクラスUIRefreshControlviewDidLoadメソッドで myをインスタンス化します。このメソッドでサブクラスのプロパティUITableViewControllerを設定します。refreshControlUITableViewController
  • UIRefreshControl完全に正常に動作し、その一部を見ることができますが、私のUINavigationBar. hidesNavigationBarに設定すると、完全に正常に見えますYES(ただし、非表示にしたくありません)。

編集:

my の作成と配置に使用されるコードUIRefreshControlは次のとおりです。

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self 
                   action:@selector(toggleRefresh:) 
         forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;

このコード スニペットは、の子ビュー コントローラーであるサブクラスのviewDidLoadメソッドにあります。UITableViewControllerUINavigationViewController

4

6 に答える 6

4

私は本当の解決策を見つけました、ここにあります:

私は半透明のUIViewController内側を持っています。の中にがあります。UINavigationControllerNavigationBarUIViewControllerUITableView

を追加したいのですが、それを行うと、あなたが説明するように UIRefreshControlによって隠されます。NavigationBar

これを機能させるための私のコードは次のとおりです。

// Add a UITableViewController
self.tblViewController = [[UITableViewController alloc] init];

// Set the UITableView to it
self.tblViewController.tableView = self.tblView;

// Initialize the UIRefreshControl and set it's method
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged];

// Set the RefreshControl to the UITableViewController
self.tblViewController.refreshControl = self.refreshControl;

// Here is the thing ! Just change the contentInset to push down the UITableView content to 64 pixels (StatusBar + NavigationBar)
self.tblView.contentInset = UIEdgeInsetsMake(64.f, 0.f, 0.f, 0.f);

このコードを使用すると、セルを下にスクロールしても完全にUITableViewController表示され、半透明の効果が維持されます。RefreshControlNavigationBar

于 2014-08-15T06:29:21.643 に答える
1

iOS 7 では、次のように記述することを除いて、self.view は navigationBar の下にあります。

self.edgesForExtendedLayout = UIRectEdgeNone; // or UIRectEdgeAll & ~UIRectEdgeTop

また

self.navigationViewController.navigationbar.translucent = NO;
于 2014-05-22T06:45:26.893 に答える
0

@Jonathanの回答を使用して、これがうまく機能しました。しかし、私はストーリーボードを使用しているので、コンテンツインセットを次のように設定します:

ここに画像の説明を入力 (xcode 6.4)

于 2015-10-15T14:08:34.387 に答える
-1

に電話しない-setTranslucent:でくださいUINavigationBar。次に、更新コントロールがナビゲーション バーの下に適切に配置されます。

于 2013-07-23T19:25:24.533 に答える