Ответ 1
Прежде всего: JSQMessagesViewController
подкласс UIViweController
. Это означает, что вы можете легко добавить subviews. Вы почти все сделали правильно в Attempt 2
, но вы установили неправильный фрейм. Я предлагаю вам использовать автоматическую компоновку для этого, как в коде ниже:
Свифта
var searchBar: UISearchBar!;
override func viewDidLoad() {
super.viewDidLoad()
searchBar = UISearchBar()
searchBar.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(searchBar)
let views = ["searchBar" : self.searchBar];
searchBar.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("[searchBar(44)]", options: NSLayoutFormatOptions(0), metrics: nil, views: views))
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|[searchBar]|", options: NSLayoutFormatOptions(0), metrics: nil, views: views))
self.view.addConstraint(NSLayoutConstraint(item: searchBar, attribute: .Top, relatedBy: .Equal, toItem: self.topLayoutGuide, attribute: .Bottom, multiplier: 1.0, constant: 0.0))
}
Цель C
@property (nonatomic, strong) UISearchBar *searchBar;
...
// viewDidLoad
self.searchBar = [UISearchBar new];
self.searchBar.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:self.searchBar];
NSDictionary *views = @{@"searchBar" : self.searchBar};
[self.searchBar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[searchBar(44)]"
options:0
metrics:nil
views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[searchBar]|"
options:0
metrics:nil
views:views]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.searchBar
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.topLayoutGuide
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0]];