感觉这应该是相当简单的,但到目前为止我没有尝试过任何工作。简而言之,我想在我以编程方式创建的UITableViewController中的导航栏下方添加一个固定图像。换句话说,我希望图像保持在导航栏的正下方,即使用户在桌面视图中上下滚动(它基本上是导航栏的自定义阴影)。
我得到的最接近的是下面的代码(在UITableViewController的init方法中),它会添加图像,但在用户滚动时不会阻止它移动。
// Add nav bar drop shadow
UIImage *dropShadowImage = [UIImage imageNamed:@"NavBarDropShadow.png"];
UIImageView *dropShadowView = [[UIImageView alloc] initWithImage:dropShadowImage];
[self.view addSubview:dropShadowView];
是否有一种简单的方法可以通过编程方式将图像添加到屏幕上,将其放置在您喜欢的任何位置,并在用户滚动时将其保留在那里?感谢您的所有输入!
答案 0 :(得分:2)
您可以在UINavigationBar上创建子类或类别,并让它在init
或drawRect
方法中添加图像。如果你考虑一下,你试图在导航栏中添加一个阴影,而不是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)
看看我回答过的这个类似的问题。它应该通过很少的自定义完成您想要的。
答案 4 :(得分:0)
不要使UITableView
主视图即。 view
插座,将其设置为包含UIView
的{{1}},然后将您的控制器设为UITableView
的子类,并使其符合UIViewController
和UITableViewDataSource
。在你的笔尖中,设置你的视图,使你在顶部有一个UIImageView,在下面有一个UITableView。并将UITableViewDelegate
和delegate
设置为datasource
。