小编Dav*_*ter的帖子

iOS 8顶级布局指导自动布局问题

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

这就是iOS 7上的视图:

iOS 7屏幕

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

iOS 7屏幕

如您所见,视图显示在导航栏上方.顶部布局指南有两个约束,一个用于上部图像视图,另一个用于下面的白色视图.底部布局指南没有约束,只有视图的高度限制.

出于某种原因,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)

iphone ios autolayout ios8

23
推荐指数
4
解决办法
4万
查看次数

UITearchBar在iOS 7/8上的UITableViewHeader奇怪动画中

我们有一类SearchTableViewController是持有UISearchBar作为tableViewHeaderUITableView.我们还使用UISearchDisplayController其委托(searchResultsDelegatesearchResultsDataSource)是保存包含searchBar的tableView的同一个控制器.

搜索本身效果很好,但进入/退出搜索模式时的动画真的很奇怪:

奇怪的动画1

在另一个视图控制器(该类的子类SearchTableViewController)中,问题更加明显:

奇怪的动画2

我已经尝试过实现各种UISearchDisplayDelegate方法(例如-(void)searchDisplayControllerWillBeginSearch:),但它们要么被调用得太晚(当动画已经完成时),要么只是在给予UISearchBar文本字段焦点时.我有什么方法可以让我在动画发生之前更改动画吗?另外,请注意导航栏在第一个视频中如何立即消失.我已经尝试在多个位置手动将其设置为"不隐藏",这并没有改变任何东西.

我们navigationBar的配置不是半透明的,如果这有任何区别.在iOS 6上,一切都按预期工作,searchBar平滑地向上推动navigationBar.

如有必要,将发布代码,但我们不会以任何方式修改标准行为(设置框架,覆盖委托方法等).

什么想法可能是奇怪的动画的原因?

uitableview uisearchbar ios

20
推荐指数
1
解决办法
6576
查看次数

在使用forEach迭代期间从集合中删除元素

最近,我编写了这段代码而没有多想它:

myObject.myCollection.forEach { myObject.removeItem($0) }
Run Code Online (Sandbox Code Playgroud)

myObject.removeItem(_)从哪里删除项目myObject.myCollection.

现在看代码,我很困惑为什么这个甚至有用 - 我不应该得到一个例外Collection was mutated while being enumerated吗?使用常规for-in循环时,相同的代码甚至可以正常工作!

这是预期的行为,还是我"幸运"它没有崩溃?

swift

16
推荐指数
2
解决办法
3632
查看次数

如何用固定的起始位置替换panGestureDidMove

我一直在使用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)

uiview cabasicanimation uigesturerecognizer swift

7
推荐指数
1
解决办法
164
查看次数

UIScrollView重叠弹出UIViewController

我有一个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)

uitableview uiscrollview ios

2
推荐指数
1
解决办法
827
查看次数

scons调用错误构建AllJoyn for iOS

我正试图在OSX Mavericks(10.9.3)上使用Xcode(5.1.1)为IOS构建AllJoyn.我已按照此处发布的所有步骤进行了操作,但仍然收到"Shell脚本调用错误",错误:不能执行'scons'(没有这样的文件或目录)在指令的最后一步,无法弄清楚如何为了解决这个问题,我已经安装了自制软件的scons,并尝试手动安装并安装它,但由于某种原因它无法找到它.任何帮助将非常感激.

build objective-c scons ios alljoyn

2
推荐指数
1
解决办法
656
查看次数