2011-05-29 45 views
3

感覺就像下面這樣應該是相當簡單的,但沒有到目前爲止,我已經試過了工作。簡而言之,我想在我以編程方式創建的UITableViewController中的導航欄下方添加一個固定圖像。換句話說,即使用戶在表格視圖中上下滾動(它基本上是導航欄的自定義下拉陰影),我也希望圖像保持在導航欄的正下方。的iOS:添加一個固定的圖像只是導航欄

我已經得到最接近的是下面的代碼(在UITableViewController中的init方法),它增加了圖像,但不會阻止其移動,當用戶滾動。

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

有沒有一種簡單的方法來添加圖像添加到屏幕編程,它定位你喜歡的地方,並把它留在那裏,甚至當用戶滾動?感謝您的任何和所有的投入!

回答

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默認情況下不做任何事情,但在佈局視圖之前調用「懶」。

有關自定義大小的詳細信息/期待適用於UIView的(以及任何其他子類)看看here

+0

這是一個很好的示例,但我會將它添加到單獨的文件中。 – Moshe 2011-05-29 13:38:33

+0

這似乎非常接近工作。投影陰影需要低於導航欄通常被切斷的位置。我已經得到了這一行'[image drawInRect:CGRectMake(0,0,self.frame.size.width,self.frame.size.height + 15.5)];'這爲我的新導航欄圖像提供了正確的高寬比,但投影被切斷。有沒有辦法讓導航欄中的「溢出」可見? – 2011-05-29 15:08:13

+0

請參閱我的答案除了 – 2011-05-29 16:02:52

2

您可以在UINavigationBar上創建一個子類或一個類別,並讓它在initdrawRect方法中添加圖像。如果你仔細想想,你會試圖給導航欄添加一個陰影,而不是UITableView,所以修改導航欄而不是表格是有意義的。

+0

這將是一個子類,而不是一個類別。 – 2011-05-29 13:14:18

+0

在我看來,一個類別是首選,對於一個子類,這種變化太小,功能也沒有改變...... – 2011-05-29 13:16:52

+1

我已經把它放在兩處,因爲我發現文體上的差異已經浮出水面。 – Moshe 2011-05-29 13:17:40

0

你加入你的dropShadowView到self.view你的情況是一個的UITableViewController的視圖。這意味着你的self.view是一個UITableView,所以當你上下滾動時,你也滾動dropShadowView,因爲它在tableView中。

嘗試寫一個自定義的UIViewController,並添加兩個子視圖:一個是dropShadowView,另一種是你的表。

0

不要使UITableView主視圖即view插座,將其設置爲包含UITableViewUIView,然後使您的控制器成爲UIViewController的子類,並使其符合UITableViewDataSourceUITableViewDelegate。在你的筆尖中,設置你的視圖,以便在頂部有一個UIImageView,在下面有一個UITableView。並將delegatedatasource設置爲您的file's owner