2011-06-24 63 views
4

當您在橫向模式下啓動時,我的搜索欄拉得稍微偏右。如果旋轉到縱向模式,它仍然稍寬。但是,如果您以縱向模式開始並且如果您將其旋轉至橫向,則很好。這是我的代碼。UISearchBar橫向寬度錯誤

sBar = [[UISearchBar alloc] initWithFrame:CGRectZero]; 
[sBar sizeToFit]; 
sBar.delegate = self; 
sBar.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleBottomMargin; 
[self.view addSubview:sBar]; 
+0

你可以做'NSLog(@「%@」,NSStringFromCGRect(sBar.frame));'sizeToFit'調用之後? –

+0

sBar的寬度比框架的寬度大20 - sBar {{0,0}} {320,44}} 框架{{0,0}} {300,480}} –

+0

意外地,寬度是320,與幀一樣... sBar {{0,0},{320,44}}幀{{0,0},{320,460}} –

回答

6

答案是在運行代碼的其餘部分之前將搜索欄添加到視圖。

UISearchBar * tempSBar = [[UISearchBar alloc] initWithFrame:CGRectZero]; 
self.sBar = tempSBar; 
[tempSBar release]; 

[self.view addSubview:sBar]; 
[sBar sizeToFit]; 
sBar.delegate = self; 
sBar.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleBottomMargin; 
+0

順便說一下,我是否有權創建臨時搜索欄,使我的搜索欄,然後釋放臨時欄? (請記住,我的搜索欄已被設置爲@property retain)。這是毫無意義或必要的?我對客觀的C和內存管理相當陌生。 –

0
UIViewAutoresizingFlexibleRightMargin 

,這增加sBar.autoresizingMask,我有藏漢作爲其他2,沒有問題。如果您使用的是IB,請確保其中的右側寬度也爲

+0

我試過了,但令我驚訝的是它沒有什麼區別:S。順便說一句,我沒有在這個屏幕上使用IB。 –

0

我知道這是舊的和不推薦使用,但我只是分享。我高高在上地尋求解決方案,可以爲我的案件工作。我嘗試了所有的建議,無濟於事。然後我偶然發現了這顆寶石

// Update search bar frame. 
CGRect superviewFrame = self.searchDisplayController.searchBar.superview.frame; 
superviewFrame.origin.y = 0.f; 
self.searchDisplayController.searchBar.superview.frame = superviewFrame; 

而且一切都變得美好而又陽光明媚。謝謝彼得在 http://petersteinberger.com/blog/2013/fixing-uisearchdisplaycontroller-on-ios-7/