使用侧边栏菜单时,UITableView 无意中向下移动了约 1 英寸

Posted

技术标签:

【中文标题】使用侧边栏菜单时,UITableView 无意中向下移动了约 1 英寸【英文标题】:UITableView is shifting down ~1inch unintentionally when using using sidebar menu 【发布时间】:2014-05-19 19:45:00 【问题描述】:

我的应用程序中有一个奇怪的错误,它使用带有UITableView 的侧边栏菜单来列出导航按钮。当我启动我的应用程序时,everything looks fine and is in the correct place。

一旦我选择了相应的viewController, and navigate back to sidebar menu theUITableView`is shifted down about 1 inch。

如果我按下侧边栏菜单按钮将其关闭,菜单会重置,一切正常且看起来正常。这个错误只发生一次,一旦我选择了一行,导航回它,关闭它,UITableView 将在正确的位置,直到用户硬重启应用程序。知道发生了什么吗?

这是我的侧边栏菜单代码:

#import "SideBarViewController.h"

@interface SideBarViewController ()

@end

@implementation SideBarViewController

@synthesize controllerArray, sidebarButton;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view.

    controllerArray = [NSArray arrayWithObjects:@"Search For Games", @"Login", @"Library", nil];



- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    return [controllerArray count];


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *simpleTableIdentifier = @"SimpleTableItem";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    

    cell.textLabel.text = [controllerArray objectAtIndex:indexPath.row];
    return cell;


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    UIViewController *selection;

    if (indexPath.row == 0) 
        selection = [self.storyboard instantiateViewControllerWithIdentifier:@"SearchController"];
        [self.navigationController pushViewController:selection animated:YES];
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
    
    else if (indexPath.row == 1) 
        selection = [self.storyboard instantiateViewControllerWithIdentifier:@"LoginController"];
        [self.navigationController pushViewController:selection animated:YES];
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
    
    else if (indexPath.row == 2) 
        selection = [self.storyboard instantiateViewControllerWithIdentifier:@"LibraryController"];
        [self.navigationController pushViewController:selection animated:YES];
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
    


我按照“Ray Wenderlich”网站上的教程获取侧边栏代码。

此外,我还测试了其他对象,例如按钮和标签,它们不会移动,只有 UITableView 会移动。

谢谢!

【问题讨论】:

检查自动布局约束中的上边距是否设置为灵活。 @pawan 我回家后看看。谢谢! @pawan 我的边距没有设置为灵活。 【参考方案1】:

我找到了解决方案!它与导航控制器的设置有关。信用到期。

Container View getting pushed down as if it had a UINavigationBar?

你需要检查一下导航栏设置下是否勾选了“半透明”。

【讨论】:

谢谢你……只是花了两个小时挠头……第一次完美……然后在带有展开segue的模态视图转换之后——它会添加一个明显的帧位移变化。谢谢。【参考方案2】:

尝试将self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0); 添加到viewDidLoad。如果您的应用自动添加插图,这可能是一个解决方案。

【讨论】:

我必须将此添加到 viewWillAppear 而不是 viewDidLoad 这项工作,一旦你的细胞向下移动,你必须调用它。所以它会重新排列。【参考方案3】:
    尝试在您的视图控制器中设置self.automaticallyAdjustsScrollViewInsets = NO。 尝试将edgesForExtendedLayout 设置为UIRectEdgeNone

希望对你有帮助。

【讨论】:

这对我不起作用。还在下移。我想知道它是否与从 UINavigation 推送有关?它似乎正在向下移动 UINav 标题栏的宽度...

以上是关于使用侧边栏菜单时,UITableView 无意中向下移动了约 1 英寸的主要内容,如果未能解决你的问题,请参考以下文章

带有侧边菜单的快速导航栏错误

Swift 3:使用侧边栏菜单

修改 UITableView 的侧边栏?

使用单击侧边栏导航菜单项调用活动

Xamarin 表单 - 侧边菜单左侧栏、片段和列表视图

以编程方式将 UITableView 添加到侧边栏