我的应用程序中的一个屏幕在更新到iOS 8 SDK时完全破坏了.问题似乎是顶部布局指南向上移动而不是其他视图的"锚点".
这就是iOS 7上的视图:

这就是它在iOS 8中的样子(从Xcode 6 View Hierarchy调试器中捕获):

如您所见,视图显示在导航栏上方.顶部布局指南有两个约束,一个用于上部图像视图,另一个用于下面的白色视图.底部布局指南没有约束,只有视图的高度限制.
出于某种原因,iOS 8决定将顶部布局指南推送到{0 -255; 0 0}after,这[self.view layoutIfNeeded]是第一次调用.此外,视图的边界有时对于设备来说太大(即,与统一故事板(600x600)完全一样,而不是320x480/320x568).
iOS 8中发生了哪些变化可能会破坏布局?
[编辑]以下是视图约束的完整列表:
(lldb) po self.view.constraints
<__NSArrayM 0x786ac520>(
<NSLayoutConstraint:0x7c377bd0 V:[_UILayoutGuide:0x7c372f60]-(0)-[UIView:0x7c373120]>,
<NSLayoutConstraint:0x7c377c00 UIView:0x7c373120.width == UIView:0x7c3730b0.width>,
<NSLayoutConstraint:0x7c377c30 UIView:0x7c3730b0.centerX == UIView:0x7c373120.centerX>,
<NSLayoutConstraint:0x7c377c60 H:|-(0)-[UIView:0x7c3716f0] (Names: '|':UIView:0x7c3730b0 )>,
<NSLayoutConstraint:0x7c377c90 UIView:0x7c3716f0.width == UIView:0x7c3730b0.width>,
<NSLayoutConstraint:0x7c372f30 V:[_UILayoutGuide:0x7c372f60]-(129)-[UIView:0x7c3716f0]>
)
Run Code Online (Sandbox Code Playgroud) 我们有一类SearchTableViewController是持有UISearchBar作为tableViewHeader其UITableView.我们还使用UISearchDisplayController其委托(searchResultsDelegate和searchResultsDataSource)是保存包含searchBar的tableView的同一个控制器.
搜索本身效果很好,但进入/退出搜索模式时的动画真的很奇怪:
在另一个视图控制器(该类的子类SearchTableViewController)中,问题更加明显:
我已经尝试过实现各种UISearchDisplayDelegate方法(例如-(void)searchDisplayControllerWillBeginSearch:),但它们要么被调用得太晚(当动画已经完成时),要么只是在给予UISearchBar文本字段焦点时.我有什么方法可以让我在动画发生之前更改动画吗?另外,请注意导航栏在第一个视频中如何立即消失.我已经尝试在多个位置手动将其设置为"不隐藏",这并没有改变任何东西.
我们navigationBar的配置不是半透明的,如果这有任何区别.在iOS 6上,一切都按预期工作,searchBar平滑地向上推动navigationBar.
如有必要,将发布代码,但我们不会以任何方式修改标准行为(设置框架,覆盖委托方法等).
什么想法可能是奇怪的动画的原因?
最近,我编写了这段代码而没有多想它:
myObject.myCollection.forEach { myObject.removeItem($0) }
Run Code Online (Sandbox Code Playgroud)
myObject.removeItem(_)从哪里删除项目myObject.myCollection.
现在看代码,我很困惑为什么这个甚至有用 - 我不应该得到一个例外Collection was mutated while being enumerated吗?使用常规for-in循环时,相同的代码甚至可以正常工作!
这是预期的行为,还是我"幸运"它没有崩溃?
我一直在使用UIPanGestureRecognizer来识别触摸,但我想用动画的固定开始到结束位置替换它.请参阅以下代码:
panGestureDidMove:
func panGestureDidMove(gesture: UIPanGestureRecognizer) {
if gesture.state == .Ended || gesture.state == .Failed || gesture.state == .Cancelled {
} else {
let additionalHeight = max(gesture.translationInView(view).y, 0)
let waveHeight = min(additionalHeight * 0.6, maxWaveHeight)
let baseHeight = minimalHeight + additionalHeight - waveHeight
let locationX = gesture.locationInView(gesture.view).x
layoutControlPoints(baseHeight: baseHeight, waveHeight: waveHeight, locationX: locationX)
updateShapeLayer()
}
}
Run Code Online (Sandbox Code Playgroud)
layoutControlPoints:
private func layoutControlPoints(baseHeight baseHeight: CGFloat, waveHeight: CGFloat, locationX: CGFloat) {
let width = view.bounds.width
let minLeftX = min((locationX - width / 2.0) * 0.28, …Run Code Online (Sandbox Code Playgroud) 我有一个UIScrollView多页面,每个页面包含一个UITableViewController(类似于Reminders-App).单击每个单元格中的单元格将UITableViewControllers导致a DetailViewController被按下.
然而,当DetailViewController弹出时,它立即消失在后面UIScrollView,而不是平滑地滑开.我可以看到UIScrollView滑动的下一页,但是当DetailViewController从最后一页推出时,过渡看起来很好,因为没有内容UIScrollView可以重叠被解雇DetailViewController.
编辑
这就是我创建视图控制器层次结构的方法(简化):
ScheduleViewController.m:
- (void) viewDidLoad {
// ...
for (int i = 0; i < 3; ++i) {
MyTableViewController *myTableViewController = [[MyTableViewController alloc] initWithNibName:@"MyTableView" bundle:nil];
[self.scrollView addSubview:myTableViewController];
[self addChildViewController:myTableViewController];
[myTableViewController didMoveToParentViewController:self];
}
Run Code Online (Sandbox Code Playgroud)
这里是
tableView:didSelectCellAtIndexPath:在MyTableViewController:
(void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// ...
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
DetailViewController* detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
[self.navigationController pushViewController:detailViewController animated:YES]; …Run Code Online (Sandbox Code Playgroud) 我正试图在OSX Mavericks(10.9.3)上使用Xcode(5.1.1)为IOS构建AllJoyn.我已按照此处发布的所有步骤进行了操作,但仍然收到"Shell脚本调用错误",错误:不能执行'scons'(没有这样的文件或目录)在指令的最后一步,无法弄清楚如何为了解决这个问题,我已经安装了自制软件的scons,并尝试手动安装并安装它,但由于某种原因它无法找到它.任何帮助将非常感激.
ios ×4
swift ×2
uitableview ×2
alljoyn ×1
autolayout ×1
build ×1
ios8 ×1
iphone ×1
objective-c ×1
scons ×1
uiscrollview ×1
uisearchbar ×1
uiview ×1