UISearchBar 横向宽度错误
Posted
技术标签:
【中文标题】UISearchBar 横向宽度错误【英文标题】:UISearchBar width wrong in landscape 【发布时间】:2011-06-24 11:08:35 【问题描述】:当您以横向模式开始时,我的搜索栏向右拉伸得有点过远。如果然后旋转到纵向模式,它仍然有点太宽。但是,如果您以纵向模式开始,然后将其旋转为横向,则很好。这是我的代码。
sBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
[sBar sizeToFit];
sBar.delegate = self;
sBar.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleBottomMargin;
[self.view addSubview:sBar];
【问题讨论】:
你可以在sizeToFit
通话后做NSLog(@"%@", NSStringFromCGRect(sBar.frame));
吗?
sBar 的宽度比框架的宽度大 20 - sBar 0, 0, 320, 44 框架 0, 0, 300, 480
顺便说一下,宽度是320,和frame一样... sBar 0, 0, 320, 44 Frame 0, 0, 320, 460
嗯。实际上这些数字并没有加起来,因为肯定在横向它应该比纵向宽得多
【参考方案1】:
答案是在运行其余代码之前将搜索栏添加到视图中。
UISearchBar * tempSBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
self.sBar = tempSBar;
[tempSBar release];
[self.view addSubview:sBar];
[sBar sizeToFit];
sBar.delegate = self;
sBar.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleBottomMargin;
【讨论】:
顺便说一句,我是否正确创建临时搜索栏,将其设为我的搜索栏,然后释放临时栏? (请记住,我的搜索栏已设置为 @property 保留)。这是没有意义的还是必要的?我对目标 c 和内存管理还很陌生。【参考方案2】:UIViewAutoresizingFlexibleRightMargin
将它添加到 sBar.autoresizingMask,我和其他 2 个一样,没有问题。如果您使用的是 IB,请确保其中的宽度也正确
【讨论】:
我试过了,但令我惊讶的是它没有任何区别:S。顺便说一句,我没有在这个屏幕上使用 IB。【参考方案3】:我知道这已经过时且已被弃用,但我不得不分享。我寻找适合我的情况的解决方案。我尝试了所有建议,但无济于事。然后我偶然发现了这个宝石
// 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/
【讨论】:
以上是关于UISearchBar 横向宽度错误的主要内容,如果未能解决你的问题,请参考以下文章
当 UISearchBar 成为横向的第一响应者时,模态视图移动