0

У меня 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. Это все.

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

+0

Вы добавляете [[self view] addSubview: [_ searchController searchBar]]; [[self view] addSubview: [self tableView]] ;? У вас есть ошибки в консоли? – Bimawa

+0

Да, я добавляю их так и нет, к сожалению, у меня нет никаких ошибок на консоли. – flohei

+0

Мне нужна дополнительная информация, вы можете поделиться своим кодом? – Bimawa

ответ

2

Я не знаю, была ли ваша проблема решена или нет, но я заметил потенциальную проблему в вашем коде.

Попробуйте устранения следующую строку кода:

[[self view] setTranslatesAutoresizingMaskIntoConstraints:translatesAutoreszingMaskIntoConstraints]; 

Не установить это свойство NO для вида корня.

+0

Гош ... Большое спасибо. Вот и все. – flohei

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