【问题标题】:iOS 7 UISearchBar right spacingiOS 7 UISearchBar 右间距
【发布时间】:2013-10-03 09:32:44
【问题描述】:

不知道为什么,我在 iOS 7 中的搜索栏留下了正确的空间。在 iOS 6 中没问题。

我知道它与节索引有关,因为如果我删除它,空间就会消失,但我不知道如何修复它。有什么想法吗?

【问题讨论】:

  • 是您的第一个 tableviewcell 的 Searchbar 子视图吗?
  • 不是,是 UITableView 的子视图
  • 请告诉我你添加搜索栏作为tableview子视图的代码!
  • 我只是在情节提要中完成。

标签: ios objective-c ios7 uisearchbar


【解决方案1】:

将您的 UISearchBar 嵌入到 UIView 中,然后将其添加为 tableHeaderView。在故事板中以这种方式构建它对我有用。我猜 iOS 会在 tableHeaderView 中调整 UISearchBar 的大小,但只留下一个基本的 UIView(并且不费心去查看它)。

您可能还想使部分索引透明,我就是这样做的:

[[UITableView appearance] setSectionIndexBackgroundColor:[UIColor clearColor]];
[[UITableView appearance] setSectionIndexTrackingBackgroundColor:[UIColor clearColor]];

【讨论】:

    【解决方案2】:

    在出现更好的答案之前,我只是手动更改了搜索栏的框架,如下所示:

    - (void)viewDidLayoutSubviews {
        [super viewDidLayoutSubviews];        
    
        CGRect barFrame = self.searchBar.frame;
        barFrame.size.width = self.view.bounds.size.width;
        self.searchBar.frame = barFrame;
    
    }
    

    【讨论】:

    • 我有同样的问题,就像问题一样。您的代码有帮助,但它是一件小事..比我滚动(在调用 viewDidLayoutSubviews 方法中)搜索栏宽度 = 320 和其中的文本文件〜 300。但是如果我点击文本文件,它将专注于并单击取消 - searcbar 宽度变为 320并且其中的文本文件大约为 290。要解决它,我们应该再手动更改 SearchBr 的 1 时间
    • 太棒了!!我对这个 iOS7 愚蠢的错误感到惊讶,感谢您的精彩回答。我认为在 iOS7 中对表视图的索引很糟糕。
    • 不适用于 UISearchDisplayController
    【解决方案3】:

    在使用 SearchDisplayController 时,我在 iPhone 6/ 6Plus 上遇到了同样的问题。 (使用斯威夫特)

    我尝试设置搜索栏的框架,但没有成功,但我注意到,如果我点击 UISearchBar 的 textField 然后取消它,那么它将采用适当的视图大小。因此,我设法通过使用搜索在 viewController 的 ViewDidLoad 中调用以下代码来解决此问题。

    self.searchController.setActive(true, animated: false)
    self.searchController.setActive(false, animated: false)
    

    【讨论】:

      【解决方案4】:
      self.contactsTableView.sectionIndexBackgroundColor = [UIColor clearColor];
      

      出现白色边缘的原因是您的索引图层具有白色背景并且位于搜索栏的顶部。这应该足够了。

      【讨论】:

        【解决方案5】:

        在 UIView 中添加搜索栏作为 tableView 的标题视图。将 tableview 的 sectionIndexBackgroundColor 设置为清除颜色,因为它覆盖了标题。

        在 iOS 7、7.1 上测试;

        【讨论】:

          【解决方案6】:

          因为 table view 总是在 section Indexes View 的右边留下 15px,所以你应该在重新加载 table view 后调整搜索栏的大小

          第一:

          self.tblData.sectionIndexBackgroundColor = [UIColor clearColor]; //(iOS >= 7 only)
          

          作弊时间:

          - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
          {
          
              [self performSelector:@selector(resizeSearchBar) withObject:nil afterDelay:0.01];
          }
          - (void) resizeSearchBar
          {
              CGRect frame = self.searchBar.frame;
              if (frame.size.width < self.tblData.frame.size.width) {
                  frame.size.width = self.tblData.frame.size.width;
              }
              self.searchBar.frame = frame;
          }
          - (void) reloadTableData // call it anytime you want to reload table view
          {
              [self.tblData reloadData];
              [self performSelector:@selector(resizeSearchBar) withObject:nil afterDelay:0.01];
          }
          

          建议 不要像我一样作弊,用更简单的方法:

          self.searchBar.searchBarStyle = UISearchBarStyleMinimal; // iOS >= 7 only
          

          【讨论】:

          • 我认为每次表格视图滚动时都不需要调整搜索栏的大小。
          • 每次表格视图滚动,都会改变你的搜索栏大小。
          • 我的情况不是这样。
          • 您是否尝试使用我的代码重新加载表格? [self reloadTableData];
          【解决方案7】:

          我还在我的应用程序中附加了一个UISearcBar,即使我的应用程序也支持旋转也没有任何问题。

          您能否尝试在storyboard/xib 中删除并重新创建UISearchBar

          【讨论】:

          • 同样的事情发生了。你有像我一样在表格视图右侧的部分索引吗?
          • 不,我不知道。尝试在autolayout 中设置SearchBar width constraints。
          【解决方案8】:

          我将搜索栏添加为顶级视图的子视图,而不是表格视图。使用自动布局将搜索栏固定到顶部指南,并且搜索栏和表格视图之间的垂直空间约束为 0。

          【讨论】:

            【解决方案9】:

            采用viewDidLayoutSubviews 方法的公认解决方案使屏幕闪烁。 相反,我所做的是创建一个 UISearchBar 的子类,它只是这样做:

            FullWidthSearchBar.h:

            @interface FullWidthSearchBar : UISearchBar
            @end
            

            FullWidthSearchBar.m:

            #import "FullWidthSearchBar.h"
            @implementation FullWidthSearchBar
            
            - (void)setFrame:(CGRect)frame {
                frame.size.width = self.superview.bounds.size.width;
                [super setFrame:frame];
            }
            
            @end
            

            然后我将该类分配给我的 xib 上的搜索栏:

            【讨论】:

              【解决方案10】:

              问题是右侧的白色块,所以如果我们将块颜色更改为与搜索栏背景相同,它看起来很正常。

              只是

              if (IOS7) {
                  self.tableview.backgroundColor = [UIColor colorWithPatternImage:self.searchBar.backgroundImage];
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-10-01
                • 2014-03-08
                • 2015-09-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多