【问题标题】:iOS: Adding a fixed image just below the navigation bariOS:在导航栏下方添加固定图像
【发布时间】:2011-05-29 13:03:51
【问题描述】:

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

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

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

有没有一种简单的方法可以以编程方式将图像添加到屏幕上,将其放置在您喜欢的任何位置,并且即使用户滚动也能保持原位?感谢您的所有意见!

【问题讨论】:

    标签: iphone ios image uitableview frontend


    【解决方案1】:

    编辑: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 默认情况下什么都不做,但在布局视图之前被“惰性”调用。

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

    【讨论】:

    • 这是一个很好的示例,虽然我会将它添加到单独的文件中。
    • 这似乎真的很接近工作了。阴影需要下降到导航栏通常被切断的位置下方。我有这条线[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height + 15.5)];,它为我的新导航栏图像提供了正确的纵横比,但投影被切断了。有没有办法让导航栏的“溢出”可见?
    • 请查看我的答案的补充
    • 感谢您的帮助 mindnoise(以及其他所有人)。我通过对您的建议进行了一些细微修改来解决了这个特定问题,但它引发了一个新的有趣问题。我已经在stackoverflow.com/q/6169474/622981 单独问过了。
    【解决方案2】:

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

    【讨论】:

    • 那将是一个子类而不是一个类别。
    • 一个类别在我看来是首选,对于子类来说变化太小而且没有任何功能改变......
    • 我把它留在了两个地方,因为我发现风格上的差异已经显现出来了。
    • 不是用于添加方法的类别,而不是覆盖方法吗?
    • 其实我觉得这是个好问题,所以我asked it
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      看看我不久前回答的这个类似问题。它应该完全符合您的要求,几乎不需要定制。

      Transparent View at the Top of a UITableView

      【讨论】:

        【解决方案5】:

        不要创建UITableView 主视图,即。 view 出口,将其设置为包含UITableViewUIView,然后使您的控制器成为UIViewController 的子类,并使其符合UITableViewDataSourceUITableViewDelegate。在您的笔尖中,设置您的视图,以便您在顶部有一个 UIImageView,在下面有一个 UITableView。并将delegatedatasource 设置为您的file's owner

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-14
          • 2013-11-21
          • 2017-01-07
          • 1970-01-01
          • 2018-07-26
          • 2018-06-23
          • 1970-01-01
          • 2013-05-19
          相关资源
          最近更新 更多