プレーンジェーンUITableViewをiOS 7のUIViewControllerにドラッグしました。
これで、最初のセルが始まる前にスペースの垂直オフセットがあります。どうすれば取り除くことができますか?最初の行を、UITableViewが実際に開始する場所の上端にはるかに近づけたいと思います。私は大きなオフセットを要求しませんでしたか?
何か案は?
プレーンジェーンUITableViewをiOS 7のUIViewControllerにドラッグしました。
これで、最初のセルが始まる前にスペースの垂直オフセットがあります。どうすれば取り除くことができますか?最初の行を、UITableViewが実際に開始する場所の上端にはるかに近づけたいと思います。私は大きなオフセットを要求しませんでしたか?
何か案は?
回答:
デフォルトでは、テーブルビューコントローラーはコンテンツをナビゲーションバーの下に埋め込み、その下のコンテンツをスクロールして、ぼかした状態で、ナビゲーションバー/ツールバーの下に表示できます。
ナビゲーションバーの下から外に移動するために44(おそらく64)ピクセルに配置しているように見えますが、既にこれを補正しているため、大きなギャップが生じます。
IBのストーリーボード/ xibに移動し、ナビゲーションバーにあるショーコンテンツのチェックを外します。
Adjust Scroll View insets
。チェックマークを外してください。
UIViewControllerの新しいiOS 7実装には、システムがUIScrollView、UITableView、および派生のインセットを自動的に追加するかどうかを開発者が選択できる新しいオプションセットがあります。
この動作を無効にするには、UIViewControllerで選択したオブジェクトインスペクタで、InterfaceBuilderの必要なすべてのUIViewControllersのこれらのボックスをオフにします。
詳細については:
スクロールビューのコンテンツインセットを自動的に調整したくない場合は、automaticAdjustsScrollViewInsetsをNOに設定します。(automaticAdjustsScrollViewInsetsのデフォルト値はYESです。)
self.automaticallyAdjustsScrollViewInsets = NO;
Adjust Scroll View Insets
ビューコントローラレイアウトのチェックボックスをオフにします。
automaticallyAdjustsScrollViewInsets = NO
ビューコントローラーで設定します。
同様の問題があり、viewControllerを閉じた後、tableViewのcontentOffsetが(0、-64)に変更されました。
私の解決策は少し奇妙でした、私は他のすべての答えを試みましたが成功しませんでした、私の問題を解決した唯一のことは.xibのコントロールツリーでtableViewの位置を切り替えることでした
これは親ビューの最初のコントロールでした。
ImageViewの直後にtableViewを移動し、それが機能しました。
テーブルビューを最初の位置に配置すると問題が発生したようで、テーブルビューを別の位置に移動すると問題が解決しました。
PD私はautoLayoutもストーリーボードも使用していません
これが誰かを助けることを願っています!
それは私の同様の問題を解決します:
if ([[UIDevice currentDevice].systemVersion floatValue] >= 7){
tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);
}
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
これを使ってみてください
tableView.separatorInset = UIEdgeInsetsZero;
明らかに、iOS7未満をサポートしている場合は、オブジェクトを呼び出す前に、オブジェクトがこのセレクターに応答することを確認する必要があります。
iOS 9では、このページの他の回答はどれもうまくいきませんでした(つまり、ストーリーボードのボックスをオフにして、に設定automaticallyAdjustsScrollViewInsets
しますNO
)。
私が本当に不満を抱いている私の回避策はこれでした:
- (void)viewDidAppear:(BOOL)animated {
self.tableView.contentOffset = CGPointMake(0.0, 0.0);
self.tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0);
}
同じviewWillAppear
またはviewDidLoad
無効でした。
Adjust Scroll View insets
、チェックボックスは、iOS 9.のために働く
時々 、私が得る64
とき私のテーブルビューの上部の高さのギャップをUIViewController
ナビゲーションコントローラの内部に埋め込まれています。
以前は、白紙の状態で制約が正しくなることを期待して、すべてを再作成していました。
TIL:に垂直方向の制約を課したくない場合はTop Layout Guide
、Option
キーを押したままにアクセスできますContainer Margin
。
次に、Top Space to Superview
定数がに設定されていることを確認し0
ます。これは少なくとも私にとってはうまくいきました。
コンテナービューに埋め込まれたUITableViewControllerがありました。不要な垂直スペースの64ポイントを取り除くために、Interface Builderで「Scroll View Insetsを調整」のチェックを外して、UITableViewControllerのviewWillAppearでUITableViewのcontentInsetを以下のように設定する必要がありました。
垂直スペースのサイズは、ナビゲーションバーのフレームの高さとyオフセットに一致するように見えます。この問題はiOS 7でのみ発生しました。
- (void)viewWillAppear:(BOOL)animated;
{
[super viewWillAppear:animated];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
const CGRect navBarFrame = self.navigationController.navigationBar.frame;
const CGFloat blankVerticalSpace = navBarFrame.origin.y + navBarFrame.size.height;
self.tableView.contentInset = UIEdgeInsetsMake(-blankVerticalSpace, 0, 0, 0);
}
}
Xamarin iOSでは、フォアグラウンドのモーダルダイアログが閉じられた直後に、バックグラウンドのUITableViewControllerでこの問題が発生していました。フォアグラウンドに移動する過程で、UITableViewControllerにはインセットが設定されていました(iOSのどこか)。
このクラスはそれを解決しました
public class UITableViewControllerWithBugFix : UITableViewController {
public UITableViewControllerWithBugFix(UITableViewStyle withStyle) : base(withStyle) {
}
public override void ViewWillLayoutSubviews() {
if (TableView.ContentInset.Top != 0.0f)
TableView.ContentInset = UIEdgeInsets.Zero;
if (TableView.ScrollIndicatorInsets.Top != 0.0f)
TableView.ScrollIndicatorInsets = UIEdgeInsets.Zero;
base.ViewWillLayoutSubviews();
}
}
ストーリーボードに移動する場合は、テーブルを選択してオフセットを変更できます。属性インスペクタの[テーブルビュー]セクションで、左側のセパレータインセットを0に変更するだけです。
あなたはNavigationControllerかContainerViewであなたのTableViewControllerを埋め込まれた場合は、You have to constraint to margins instead of top Layout guide in Storyboard
。Check constraint to margins when you are doing the constraints
他の方法ではうまくいきませんでした。コメントできなかったので、ロバートチェンスの回答について繰り返し説明します。
私はいくつかの答えを試しました。ストーリーボードの設定を変更すると、左からポップアップするオーバーレイメニューでリップルの問題が発生しました。
ストーリーボードには空白のUIViewControllerしかありません。それ以外の場合、すべてがプログラムで生成されます。
UIViewController内のUIView内のUITableViewにも同じ問題があります。つまり、UIViewControllerがNavigation Controllerに埋め込まれている場合、セクションヘッダーの開始位置が極端に低くなります。ナビゲーションコントローラーがなければ、すべてが正常に動作します。
問題を修正するために、UILabelを作成し、UILabel下部制約= UIViewの上部制約を配置して作成しました(そのため、画面に表示されません。追加のコントロール(新しいラベル)を使用すると、TableViewは正しく動作します。
inputsContainerView.addSubview(titleLabel)
inputsContainerView.addSubview(tableView)
// inputsContainerView
///////////////////////////////////////
inputsContainerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
inputsContainerView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 0).isActive = true
inputsContainerView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -40).isActive = true
inputsContainerView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.7).isActive = true
// tableView
///////////////////////////////////////
tableView.centerXAnchor.constraint(equalTo: inputsContainerView.centerXAnchor).isActive = true
tableView.topAnchor.constraint(equalTo: inputsContainerView.topAnchor).isActive = true
tableView.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
tableView.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor).isActive = true
// titleLabel - inserted to stop bad section header behavior
///////////////////////////////////////
titleLabel.centerXAnchor.constraint(equalTo: inputsContainerView.centerXAnchor).isActive = true
titleLabel.bottomAnchor.constraint(equalTo: inputsContainerView.topAnchor).isActive = true
titleLabel.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
titleLabel.heightAnchor.constraint(equalToConstant: 20).isActive = true