2013-10-03 5 views
7

Не знаю, почему моя панель поиска в iOS 7 оставляет правильное пространство. Это нормально в iOS 6.iOS 7 UISearchBar правое расстояние

Я знаю, что это как-то связано с индексом раздела, потому что если я удалю его, пространство исчезнет, ​​но я не знаю, как его исправить. Есть предположения?

enter image description here

+0

- это ваша поисковая панель под заголовком first tableviewcell? –

+0

Нет, это подзаголовок UITableView – Odrakir

+0

, пожалуйста, покажите мне код, который вы добавляете в качестве подзадачи в представлении таблицы! –

ответ

6

Пока не появится лучший ответ, я просто вручную изменил кадр панели поиска, как это:

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews];   

    CGRect barFrame = self.searchBar.frame; 
    barFrame.size.width = self.view.bounds.size.width; 
    self.searchBar.frame = barFrame; 

} 
+0

Я отправил правильный ответ ниже, если это помогает – MahmoudA

+0

Это работает красиво. Благодаря! – OlivaresF

+0

У меня такая же проблема, как вопрос. Ваша кодовая помощь, но ее мелочь .. Чем я прокручиваю (в методах viewDidLayoutSubviews метод), ширина поисковой ширины = 320 и текстовый файл в ней ~ 300. Но если я коснусь текстового файла, и он будет сфокусирован и нажмите «Отменить» - ширина поисковой машины станет 320 и textfiled в нем будет около 290. Чтобы решить это, нам нужно еще 1 раз изменить рамку SearchBr manualy –

0

Я также приложил UISearcBar в моем приложении, и нет ничего плохого там даже мое приложение поддерживает вращение также.

Не могли бы вы попробовать удалить и повторно создать UISearchBar в storyboard/xib

+0

То же самое происходит. У вас есть индекс раздела справа от представления таблицы, как и я? – Odrakir

+0

Нет, я не. Попробуйте установить 'SearchBar'' ограничения ширины' в 'autolayout'. –

1

Поскольку вид таблицы всегда листья 15px справа для раздела Indexes View, поэтому вы должны изменить размер панели Seach после перезагрузки табличного вида

Первый:

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]; 
} 

Предлагайте Dont обмануть, как я, просто сделать простой способ:

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

Не думаю, что вам нужно изменять размер строки поиска каждый раз, когда свиток таблицы просматривается. – Odrakir

+0

просмотр прокрутки таблицы в любое время, это изменит размер вашей поисковой строки. –

+0

Это не в моем случае. – Odrakir

7

встраивать UISearchBar в UIView и затем добавить что как tableHeaderView. Структурирование его таким образом в раскадровке сработало для меня. Я предполагаю, что iOS изменяет размер UISearchBar в tableHeaderView, но оставляет только один UIView (и не задумывается о том, чтобы заглянуть внутрь).

Вы также можете сделать индекс раздела прозрачным, что я сделал с:

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

совершенное редактирование: этот код будет работать только в iOS 7 – user2159978

0

Я добавил строку поиска как подвид в представлении верхнего уровня вместо представления таблицы. Используется автозапуск, чтобы привязать панель поиска к верхней направляющей и ограничение по вертикали на 0 между панелью поиска и представлением таблицы.

2

enter image description here

Добавить панель поиска Внутри UIView кладется как ввиду заголовка Tableview в. Установите для параметра tableview значение sectionIndexBackgroundColor, чтобы очистить цвет, потому что он охватывает заголовок.

Протестировано iOS 7, 7.1;

0

Принятое решение с методом viewDidLayoutSubviews делает мерцание экрана. Вместо того, что я сделал, было создать подкласс UISearchBar, который просто делает это:

FullWidthSearchBar.h:

@interface FullWidthSearchBar : UISearchBar 
@end 

FullWidthSearchBar.м:

#import "FullWidthSearchBar.h" 
@implementation FullWidthSearchBar 

- (void)setFrame:(CGRect)frame { 
    frame.size.width = self.superview.bounds.size.width; 
    [super setFrame:frame]; 
} 

@end 

А потом я назначил этот класс в строке поиска на моем XIb:

enter image description here

4

У меня была такая же проблема с iPhone 6/6Plus при использовании SearchDisplayController. (С помощью Swift)

Я попытался установить рамку строки поиска, но не повезло, но я заметил, что если бы я нажал на textField UISearchBar, а затем отменил его, тогда он получил бы правильный размер представления. Поэтому мне удалось исправить проблему, вызвав код ниже в ViewDidLoad viewController, используя поиск.

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

Проблема заключается в белом белом блоке, поэтому, если мы изменим цвет блока так же, как на фоне панели поиска, это выглядит нормально.

просто

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

Причина этого белого края потому, что ваш индекс слой имеет белый фон и находится на верхней части панели поиска. Этого должно быть достаточно.

Смежные вопросы