iPhone X 上的错误观点位置
Wrong views position on iPhone X
我的应用程序在所有设备上看起来都很好,直到我在新的 iPhone X 上对其进行了测试(参见随附的屏幕截图)。
搜索栏在导航栏下面,太糟糕了。我尝试使用新的安全区域插图 edgesForExtendedLayout,但没有成功。也许有人可以帮助解决这个问题。
short videos Apple posted about iPhone X (and 8 and 8 Plus) development 解决了这个确切的情况(或一对非常接近它的夫妇)。
在他们针对 iPhone X 调整 WWDC 应用程序的案例研究中,they find that the search bar isn't set up right in the Videos tab。那是因为他们 present
ing a UISearchController
,但在 iOS 11(对于所有设备)中处理此问题的最佳方法是将搜索控制器附加到导航项。如果您仍然需要部署回 iOS 10(或更早),您可以通过可用性检查处理此问题:
let searchController = UISearchController(searchResultsController: nil)
// configure searchController properties
if #available(iOS 11.0, *) {
self.navigationItem.searchController = searchController
searchController.isActive = true // to show it now
} else {
present(searchController, animated: true, completion: nil)
}
同样,如果您直接将搜索栏设置为 table 视图的 header,you can attach it to the navigation item instead there, too:
if #available(iOS 11.0, *) {
self.navigationItem.searchController = searchController
searchController.isActive = shouldShowBarNow // made up local variable
} else {
if shouldShowBarNow {
self.tableView.tableHeaderView = searchController.searchBar
} else {
self.tableView.tableHeaderView = nil
}
}
经过一些调查,我找到了解决问题的方法。我必须根据安全区域对齐搜索视图。请参阅以下解决方案:
if (@available(iOS 11.0, *))
{
[self.searchView setTranslatesAutoresizingMaskIntoConstraints:NO];
UILayoutGuide *guide = self.view.safeAreaLayoutGuide;
[NSLayoutConstraint activateConstraints:@[
[self.searchView.topAnchor constraintEqualToAnchor:guide.topAnchor],
[self.searchView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor],
[self.searchView.trailingAnchor constraintEqualToAnchor:guide.trailingAnchor],
[NSLayoutConstraint constraintWithItem:self.searchView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:44]
]];
}
现在所有设备上的一切看起来都很棒。希望这可以帮助其他人解决类似的问题。干杯。
我的应用程序在所有设备上看起来都很好,直到我在新的 iPhone X 上对其进行了测试(参见随附的屏幕截图)。 搜索栏在导航栏下面,太糟糕了。我尝试使用新的安全区域插图 edgesForExtendedLayout,但没有成功。也许有人可以帮助解决这个问题。
short videos Apple posted about iPhone X (and 8 and 8 Plus) development 解决了这个确切的情况(或一对非常接近它的夫妇)。
在他们针对 iPhone X 调整 WWDC 应用程序的案例研究中,they find that the search bar isn't set up right in the Videos tab。那是因为他们 present
ing a UISearchController
,但在 iOS 11(对于所有设备)中处理此问题的最佳方法是将搜索控制器附加到导航项。如果您仍然需要部署回 iOS 10(或更早),您可以通过可用性检查处理此问题:
let searchController = UISearchController(searchResultsController: nil)
// configure searchController properties
if #available(iOS 11.0, *) {
self.navigationItem.searchController = searchController
searchController.isActive = true // to show it now
} else {
present(searchController, animated: true, completion: nil)
}
同样,如果您直接将搜索栏设置为 table 视图的 header,you can attach it to the navigation item instead there, too:
if #available(iOS 11.0, *) {
self.navigationItem.searchController = searchController
searchController.isActive = shouldShowBarNow // made up local variable
} else {
if shouldShowBarNow {
self.tableView.tableHeaderView = searchController.searchBar
} else {
self.tableView.tableHeaderView = nil
}
}
经过一些调查,我找到了解决问题的方法。我必须根据安全区域对齐搜索视图。请参阅以下解决方案:
if (@available(iOS 11.0, *))
{
[self.searchView setTranslatesAutoresizingMaskIntoConstraints:NO];
UILayoutGuide *guide = self.view.safeAreaLayoutGuide;
[NSLayoutConstraint activateConstraints:@[
[self.searchView.topAnchor constraintEqualToAnchor:guide.topAnchor],
[self.searchView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor],
[self.searchView.trailingAnchor constraintEqualToAnchor:guide.trailingAnchor],
[NSLayoutConstraint constraintWithItem:self.searchView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:44]
]];
}
现在所有设备上的一切看起来都很棒。希望这可以帮助其他人解决类似的问题。干杯。