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 不附加导航栏

iOS MKLocalSearch导致崩溃[重复]

当 UISearchBar 成为横向的第一响应者时,模态视图移动

UIScrollViews 子视图没有在纵向到横向方向更改上调整自己的大小

UISearchBar 宽度动画和 AutoLayout

UINavigationBar 中的 UISearchBar 在旋转方向时改变宽度