问题描述
|
感觉这应该很简单,但是到目前为止我还没有尝试过。简而言之,我想在以编程方式创建的UITableViewController的导航栏下方添加固定图像。换句话说,即使用户上下滚动表格视图,我也希望图像保持在导航栏的正下方(这基本上是导航栏的自定义阴影)。
我得到的最接近的代码是下面的代码(在UITableViewController的init方法中),该代码添加了图像,但是在用户滚动时不会阻止其移动。
// Add nav bar drop shadow
UIImage *dropShadowImage = [UIImage imageNamed:@\"NavBarDropShadow.png\"];
UIImageView *dropShadowView = [[UIImageView alloc] initWithImage:dropShadowImage];
[self.view addSubview:dropShadowView];
有没有一种简单的方法可以以编程方式在屏幕上添加添加图像,将其放置在您喜欢的位置,甚至在用户滚动时也可以将其放置在屏幕上?感谢您的所有投入!
解决方法
编辑: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,self.frame.size.width,self.frame.size.height)];
}
- (void)layoutSubviews {
self.frame = CGRectMake(0,300);
}
@end
要使UINavigationBar更高,从而不剪切内容,请覆盖layoutSubviews
并设置所需的框架(上面的代码假定标头高300点)。 layoutSubviews
默认情况下不执行任何操作,但在布局视图之前会调用“ lazy”。
有关适用于UIView(以及任何其他子类)的此自定义大小/外观替代的更多信息,请在此处查看
, 您可以在UINavigationBar上创建一个子类或类别,并将其添加到init
或ѭ5add方法中。如果考虑一下,您正在尝试向导航栏而不是UITableView添加阴影,因此修改导航栏(而不是表格)是有意义的。
, 您将dropShadowView添加到self.view中,在这种情况下,它是UITableViewController的视图。这意味着您的self.view是UITableView,因此上下滚动时也滚动dropShadowView,因为它位于tableView内部。
尝试编写一个自定义UIViewController并添加两个子视图:一个是dropShadowView,另一个是您的表。
, 看看我不久前回答的这个类似问题。只需很少的定制,它就可以完全满足您的要求。
UITableView顶部的透明视图
, 不要以ѭ6为主视图。 view
插座,将其设置为包含UITableView
的UIView
,然后使控制器成为ѭ10and的子类,并使其符合UITableViewDataSource
和UITableViewDelegate
。在笔尖中,设置视图,以便在顶部具有UIImageView,在下面具有UITableView。并将delegate
和datasource
设置为file\'s owner
。