У меня UIViewController
, что делает добавить UISearchBar
и UITableView
в его -viewDidLoad
метод, как подвиды из его view
собственности. После добавления тех, создать ограничения, используя визуальный язык форматирования, как это:Программной установка NSLayoutConstraints для UITableView и UISearchBar
NSDictionary *views = @{@"searchBar": [_searchController searchBar],
@"dataTable": [self tableView]};
NSArray *horizontalSearchBarConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[searchBar]|"
options:0
metrics:nil
views:views];
NSArray *horizontalDataTableConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[dataTable]|"
options:0
metrics:nil
views:views];
NSArray *verticalSearchBarDataTableConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[searchBar(44)][dataTable]|"
options:0
metrics:nil
views:views];
NSMutableArray *allConstraints = [NSMutableArray new];
[allConstraints addObjectsFromArray:horizontalDataTableConstraints];
[allConstraints addObjectsFromArray:horizontalSearchBarConstraints];
[allConstraints addObjectsFromArray:verticalSearchBarDataTableConstraints];
[[self view] addConstraints:allConstraints];
Read: Ширина должна быть ширина всего экрана, тем searchBar
«s высота должна быть точно 44 и dataTable
» Высота s должна простираться из нижней части searchBar
в нижней части окна.
Прежде чем сделать это, я установил translatesAutoresizingMaskIntoConstraints
для этих видов на NO
. Сам UIViewController
представлен в виде модальности. Мы говорим о iOS 6.
Что я получаю: пустой вид. Просто белый.
Что я пропустил? Я по-прежнему новичок в Auto Layout и пытаюсь обернуть вокруг себя голову.
Спасибо!
Обновление: Добавление всего -viewDidLoad
- (void)viewDidLoad {
[super viewDidLoad];
BOOL translatesAutoreszingMaskIntoConstraints = NO;
[[self view] setTranslatesAutoresizingMaskIntoConstraints:translatesAutoreszingMaskIntoConstraints];
// manually create the search bar
UISearchBar *searchBar = [[UISearchBar alloc] init];
[searchBar setDelegate:self];
[searchBar setShowsCancelButton:NO];
[searchBar setTranslatesAutoresizingMaskIntoConstraints:translatesAutoreszingMaskIntoConstraints];
// create the search bar controller
_searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
[_searchController setDelegate:self];
[[_searchController searchResultsTableView] setDelegate:self];
[_searchController setSearchResultsDataSource:self];
[_searchController setSearchResultsDelegate:self];
// add the search bar
[[self view] addSubview:[_searchController searchBar]];
// manually create the table view and add it to the view
_tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
[_tableView setBackgroundView:nil];
[_tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLineEtched];
[_tableView setSeparatorColor:NEA_COLOR_MEDIUM_GREY];
[_tableView setBackgroundColor:NEA_COLOR_VIEW_BACKGROUND];
[_tableView setDataSource:self];
[_tableView setDelegate:self];
[_tableView setTranslatesAutoresizingMaskIntoConstraints:translatesAutoreszingMaskIntoConstraints];
[[self view] addSubview:[self tableView]];
// set up the layout using Auto Layout
NSDictionary *views = @{@"searchBar": [_searchController searchBar],
@"dataTable": [self tableView]};
NSArray *horizontalSearchBarConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[searchBar]|"
options:0
metrics:nil
views:views];
NSArray *horizontalDataTableConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[dataTable]|"
options:0
metrics:nil
views:views];
NSArray *verticalSearchBarDataTableConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[searchBar(44)][dataTable]|"
options:0
metrics:nil
views:views];
NSMutableArray *allConstraints = [NSMutableArray new];
[allConstraints addObjectsFromArray:horizontalDataTableConstraints];
[allConstraints addObjectsFromArray:horizontalSearchBarConstraints];
[allConstraints addObjectsFromArray:verticalSearchBarDataTableConstraints];
[[self view] addConstraints:allConstraints];
// add our little gradient
UIImage *shadow = [UIImage imageNamed:@"searchbar_bg_shadow"];
UIImageView *shadowView = [[UIImageView alloc] initWithImage:shadow];
[shadowView setFrame:CGRectMake(0, 44, 900, 14)];
[shadowView setBackgroundColor:[UIColor clearColor]];
[shadowView setTranslatesAutoresizingMaskIntoConstraints:YES];
[[self view] addSubview:shadowView];
// add the cancel button for the search bar
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"ui_navigationbar_close"] style:UIBarButtonItemStyleBordered target:self action:@selector(cancel:)];
[[self navigationItem] setRightBarButtonItem:cancelButton];
// set a short back button title
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
}
Update: Дополнительное Информация
инкапсулирующего UINavigationController
создаются через раскадровку. Там добавлен UIViewController
, установленный для моего класса, так как это rootViewController
. Это все.
Когда я вручную добавляю ширину в эту строку формата, она отображает представления. Поэтому, когда я вручную указываю размеры, он работает. Но потом, я думаю, я мог бы просто использовать фреймы вместо ...
Вы добавляете [[self view] addSubview: [_ searchController searchBar]]; [[self view] addSubview: [self tableView]] ;? У вас есть ошибки в консоли? – Bimawa
Да, я добавляю их так и нет, к сожалению, у меня нет никаких ошибок на консоли. – flohei
Мне нужна дополнительная информация, вы можете поделиться своим кодом? – Bimawa