iOS:在导航栏下方添加固定图像

时间:2011-05-29 13:03:51

标签: iphone ios image uitableview frontend

感觉这应该是相当简单的,但到目前为止我没有尝试过任何工作。简而言之,我想在我以编程方式创建的UITableViewController中的导航栏下方添加一个固定图像。换句话说,我希望图像保持在导航栏的正下方,即使用户在桌面视图中上下滚动(它基本上是导航栏的自定义阴影)。

我得到的最接近的是下面的代码(在UITableViewController的init方法中),它会添加图像,但在用户滚动时不会阻止它移动。

// Add nav bar drop shadow
UIImage *dropShadowImage = [UIImage imageNamed:@"NavBarDropShadow.png"];
UIImageView *dropShadowView = [[UIImageView alloc] initWithImage:dropShadowImage];
[self.view addSubview:dropShadowView];

是否有一种简单的方法可以通过编程方式将图像添加到屏幕上,将其放置在您喜欢的任何位置,并在用户滚动时将其保留在那里?感谢您的所有输入!

5 个答案:

答案 0 :(得分:2)

您可以在UINavigationBar上创建子类或类别,并让它在initdrawRect方法中添加图像。如果你考虑一下,你试图在导航栏中添加一个阴影,而不是UITableView,所以修改导航栏而不是表格是有意义的。

答案 1 :(得分:2)

编辑:IOS5有更好的方法来做到这一点。请查看新的UIAppearance协议。

将此代码块添加到代码中将允许您在应用程序中的所有UINavigationBars上绘制阴影。这是一个比将阴影添加为UIImageView更好的解决方案:

@implementation UINavigationBar (ShadowBar)
- (void)drawRect:(CGRect)rect {
    //draw the shadow ui nav bar
    UIImage *image = [UIImage imageNamed: @"UINavBarWithShadow.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

- (void)layoutSubviews {
    self.frame = CGRectMake(0, 0, self.frame.size.width, 300);
}
@end

要使UINavigationBar更高并因此不剪切您的内容,请覆盖layoutSubviews并设置所需的帧(上面的代码假设您的标题高300点)。 layoutSubviews默认情况下不执行任何操作,但在布局视图之前调用了“lazy”。

有关适用于UIView(以及任何其他子类)的此自定义大小/外观覆盖的详细信息,请查看here

答案 2 :(得分:0)

您正在将dropShadowView添加到self.view,在您的情况下是UITableViewController的视图。这意味着你的self.view是一个UITableView,所以当你向上和向下滚动时,你也可以滚动dropShadowView,因为它位于tableView中。

尝试编写自定义UIViewController并添加两个子视图:一个是dropShadowView,另一个是你的表。

答案 3 :(得分:0)

看看我回答过的这个类似的问题。它应该通过很少的自定义完成您想要的。

Transparent View at the Top of a UITableView

答案 4 :(得分:0)

不要使UITableView主视图即。 view插座,将其设置为包含UIView的{​​{1}},然后将您的控制器设为UITableView的子类,并使其符合UIViewControllerUITableViewDataSource。在你的笔尖中,设置你的视图,使你在顶部有一个UIImageView,在下面有一个UITableView。并将UITableViewDelegatedelegate设置为datasource