我已经在应用程序上工作了一段时间,才意识到在详细视图中向后滑动只会让我第一次回到主视图。即使它是第一次使用,它也不是很平滑。它没有立即进入主视图,而是一下子全部跳了起来,即使我慢慢滑动也是如此。它曾经可以正常工作,但是我还没有对此进行专门的测试,所以我不知道它何时停止工作以及导致该问题的原因。
关于我的应用程序设置的一些信息...
我有一个拆分视图控制器,已连接到我的MasterTableViewController
和DetailViewController
。
这两个都有TableView,并且都嵌入在导航控制器中。
我已经对其进行了设置,以使应用程序最初加载到MasterTableViewController而不是立即加载到DetailViewController,但是即使我将其取出,交互式弹出手势也无法工作。
我不相信我对任何后退按钮控件感到困惑。我已经浏览了我的代码和情节提要,找不到任何地方。这是最令人困惑的部分,因为这些问题(1,2和3)似乎都由于更改后退按钮而存在问题,或者可以通过输入以下内容来解决代码行:
self.navigationController.interactivePopGestureRecognizer.delegate = nil
将其添加到我的代码中似乎对其行为没有影响。
我通常可以自行解决这些问题,但是这个问题使我感到困惑,因为它是第一次工作,但没有其他工作。据我所知,第一次和其他时间之间没有任何变化。我不知道其他人是否也遇到过同样的问题,但是对于为什么会发生这种情况的任何帮助将不胜感激。如果需要,我可以提供代码或有关我如何做某些事情的问题的答案。我没有投入任何东西,因为控制这件作品的东西太多了,我不知道从哪里开始。
答案 0 :(得分:1)
来自 Alex Chase's answer :还要检查子 #include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <stdbool.h>
bool exists(const char fname[])
{
return access(fname, F_OK | X_OK) != -1;
}
bool find_in_path(const char name[], char *fullpath, size_t sz) {
char *paths = strdup(getenv("PATH"));
char *tmp = paths; // to use in free
const char *item;
bool found = false;
while ((item = strsep(&paths, ":")) != NULL) {
snprintf(fullpath, sz, "%s/%s", item, name);
if (exists(fullpath)) {
found = true;
break;
}
}
free(tmp);
return found;
}
int main() {
char fullpath[512];
bool found = find_in_path("uname", fullpath, sizeof(fullpath));
if (found) {
printf("found: %s\n", fullpath);
}
return 0;
}
中 viewWillAppear
的覆盖。在交互式弹出期间调用此方法。
将它添加到 ViewControllers
并且它起作用了:
viewWillAppear
答案 1 :(得分:0)
您什么时候打self.navigationController.interactivePopGestureRecognizer.delegate = nil
?
这样做肯定会禁用交互式弹出。听起来好像您是在某个UIViewController
出现之后才调用此函数。
您要对UINavigationController
进行哪些其他修改?您正在使用外观委托吗?
您在分类吗?如果是这样,您是否在所有方法覆盖中都调用super
?
还要检查子ViewController中对viewWillAppear
的替代。在交互式弹出期间调用此方法。如果您在此方法中对主线程进行大量计算(或同步调用),则可能会导致帧丢失,从而导致动画不稳定。
希望这会有所帮助