编辑:我已经创建了一个非常小的应用程序,完美地代表了问题.https://drive.google.com/file/d/0B6sI4Feh1HJUb3pGa2pBUmY4QW8/view?usp=sharing
在示例应用程序中,我们只需向下滚动,然后按顶部栏上的按钮即可查看我遇到的问题
我使用https://github.com/jamztang/CSStickyHeaderFlowLayout在我的集合视图中有粘性标题行为(如默认的UITableView).
滚动浏览集合视图时,它的效果非常好.我在collectionview外面有一个搜索栏,允许用户使用搜索文本过滤数据,每次用户输入一个字母时,我都会使用找到的数据刷新collectionview的数据.
问题是让我们说集合视图中当前有4个部分,它在底部完全滚动.当我输入一个certian字母时,它会过滤除一个项目之外的所有内容(带有一个标题).然后,内容大小会针对集合视图进行更改并显示正确的数据,但标题太低(请参见屏幕截图).
我已经调查了flowlayout内部和内部layoutAttributesForElementsInRect
,我看到它实际上将框架的原点Y设置为0(就像它应该是),但似乎collectionview不使用此值并使用前一个(当收集时)视图向下滚动).
知道什么可能导致UICollectionView
不在内部使用所需的框架layoutAttributesForElementsInRect
?
我目前正在研究如何有效地将一些单元测试添加到我的应用程序的ViewControllers中.到目前为止,它工作得很好,直到我尝试了特定的视图控制器呈现另一个.
我正在使用OCMock和XCTest.测试如下
id partialMock = OCMPartialMock([TestViewController class]);
[partialMock doSomeStuff];
OCMVerify([partialMock presentViewController:[OCMArg any] animated:[OCMArg any] completion:[OCMArg any]]);
Run Code Online (Sandbox Code Playgroud)
如您所见,我只想验证是否presentViewController
在doSomeStuff
函数内调用了测试的视图控制器.请注意,给出的示例是我目前拥有的简化版本.主要区别在于我正在验证参数viewController
是另一个模拟对象.
问题是因为doSomeStuff
方法没有存根,然后调用被转发到TestViewController
实例,然后实例调用presentViewController,然后不触发partialMock的验证.
有什么我想念的吗?或者我真正想要实现的是什么?
我目前正在iOS应用程序中提供视频MPMoviePlayerController
.这些文件从需要身份验证的后端服务器流式传输.它是Authorization HTTP Header中基于密钥的身份验证集.
它曾经与单个视频文件完美配合.现在我们正在尝试实现HLS自适应流媒体,我们面临着一堵墙.我目前正在使用自定义NSURLProtocol
子类来捕获对后端服务器发出的请求并注入适当的Authorization标头.对于HLS,它根本不起作用.
当我们查看服务器日志时,我们清楚地看到对m3u8文件的第一个请求工作正常.然后所有后续调用(其他m3u8文件和ts也)被禁止403.它似乎MPMoviePlayerController
不NSURLProtocol
用于其他文件.(旁注:它确实适用于模拟器思想,但不适用于让我认为两者都没有以相同方式实现的物理设备).
self.videoController = [[MPMoviePlayerController alloc] initWithContentURL:video.videoURL];
Run Code Online (Sandbox Code Playgroud)
+ (NSURLRequest *) canonicalRequestForRequest:(NSURLRequest *)request {
NSMutableURLRequest *newRequest = request.mutableCopy;
[newRequest setValue:@"HIDDEN" forHTTPHeaderField:@"Authorization"];
return newRequest;
}
Run Code Online (Sandbox Code Playgroud)
任何想法,建议,解决方案?
我们有一个关于 NSOperationQueue 的简单问题,这是一个简单的操作逻辑:
self.queue = [[NSOperationQueue alloc] init];
NSOperation *operationA = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"- Running operation A");
[NSThread sleepForTimeInterval:1.2];
NSLog(@"- Done operation A");
}];
NSOperation *operationB = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"- Running operation B");
[NSThread sleepForTimeInterval:2];
NSLog(@"- Done operation B");
}];
[operationA setCompletionBlock:^{
NSLog(@"-- Completion Block A");
}];
[operationB setCompletionBlock:^{
NSLog(@"-- Completion Block B");
}];
[operationB addDependency:operationA];
[self.queue addOperations:@[operationA, operationB] waitUntilFinished:NO];
Run Code Online (Sandbox Code Playgroud)
这是最终的输出
2015-12-21 14:59:57.463 SampleProject[18046:310901] - Running operation A
2015-12-21 14:59:58.664 SampleProject[18046:310901] - Done operation A
2015-12-21 14:59:58.664 SampleProject[18046:310900] - Running …
Run Code Online (Sandbox Code Playgroud) 设置
一个简单的视图控制器,在导航项中设置了 UISearchController 以在搜索栏中使用 iOS 11 的搜索功能。
任何具有顶部约束的视图 SafeArea.Top
问题
当呈现搜索控制器时,导航栏因为它的大小变化而被动画化,但对顶部区域的约束不遵循动画。
如果有人知道我能做什么(现在我想我唯一的选择是禁用hidesNavigationBarDuringPresentation
以避免动画)
请参阅下面的示例,其中我激活了慢速动画以便于理解: