2011-06-24 105 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/