我基本上有一个使用DetailViewController中的PageViewController的Master-Detail样式应用程序。 PageViewController有三个不同的场景。根据当前场景,我在三者中分别设置了rightBarButtonItems
。其中两个场景只有一个rightBarButtonItem,但其中一个场景使用两个。
如果用户从一个页面完全滚动到下一个页面,则没有问题。但是,如果用户仅在rightBarButton项目的方向上滚动并让屏幕弹回,则只会显示其中一个条形按钮项目。
根据Apple文档:
如果没有足够的空间显示数组中的所有项目,那么将不会显示与标题视图(如果存在)或栏左侧按钮重叠的项目。
这解释了发生了什么。当视图加载按钮时,它必须检查按钮可用的框架大小。控制器看到按钮将与标题重叠,因此消除了一个。我只需要在按钮出现或这种性质的东西时延迟。有没有人对如何克服这个问题有任何想法?
以下是我在DetailViewController
//Generate buttons
barButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
[barButton setImage:[UIImage imageNamed:@"arrow-up.png"]];
barButton2 = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
[barButton2 setImage:[UIImage imageNamed:@"arrow-down.png"]];
然后将按钮传递到所需的viewController并显示在viewDidAppear
。
- (void) viewDidAppear:(BOOL)animated
{
//downButton and upButton are set from barButton and barButton2 which were created in the `DetailViewController`
[upButton setTarget:self];
[downButton setTarget:self];
[downButton setAction:@selector(action1)];
[upButton setAction:@selector(action2)];
navItem.rightBarButtonItems = @[downButton, upButton];
}
以下是一些可以看到之前和之后的图像
答案 0 :(得分:0)
我偶然发现了这项工作。它并不完美,但它具有理想的效果。如果某人有更健全的解决方案,请自愿提出您的想法,我会接受您的回答。
我从这个问题的接受答案中得到了这个想法:Placing a custom view based UIBarButtonItem in the navigation bar without default horizontal padding
我只是添加了一个新的条形按钮项目,作为间隔符。
- (void) viewDidAppear:(BOOL)animated
{
// Create a spacer to go to the right of our custom button,
UIBarButtonItem *zeroSpacer = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil action:nil];
zeroSpacer.width = 0;
[upButton setTarget:self];
[downButton setTarget:self];
[downButton setAction:@selector(action1)];
[upButton setAction:@selector(action2)];
navItem.rightBarButtonItems = @[zeroSpacer, downButton, upButton];
}
出于审美原因,我还在创建按钮方面做了一些工作,使它们更紧密地联系在一起。
以下是我在viewDidLoad
的{{1}}中生成按钮的方法。 DetailViewController
中的数字对我来说真的没有那么大意义,但我只是搞砸了,直到他们看起来正确。
UIEdgeInsetsMake
以下是部分滚动滑动之前和之后的结果。