在iOS 7中,Apple添加了一个新的默认导航行为.您可以从屏幕的左边缘滑动以返回导航堆栈.但在我的应用程序中,此行为与我的自定义左菜单冲突.那么,是否可以在UINavigationController中禁用这个新手势?
objective-c uinavigationcontroller uigesturerecognizer ios ios7
在iOS7中,我们有一个新的"向左滑动"手势,这是一个非常有用的功能,但现在我有一个问题.
我使用此代码自定义后退按钮UINavigationBar
.
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];
但这将禁用"从左向右滑动"手势,因此我使用以下代码来保持手势的启用.
self.navigationController.interactivePopGestureRecognizer.delegate = self
然后,我发现手势工作异常,如果当前的ViewController有一个tableView,当tableView滚动时,手势将不会被触发.现在手势无法轻易触发,是否有某种方法可以修复它?
我正在进行子类化UIScrollView
以添加一些功能,例如双击缩放和用于图库目的的图像属性.但是为了做图像部分我的子类必须是它自己的委托并实现viewForZoomingInScrollView
.
但是当有人使用我的滚动视图子类时,他们可能也希望获得委托通知以查看scrollViewDidScroll
或者您有什么.
在Swift中,我如何获得这两个?
交互式弹出手势识别器应允许用户在滑过屏幕的一半以上(或这些行周围的内容)时返回导航堆栈中的上一个视图。在SwiftUI中,如果滑动距离不够远,手势不会被取消。
SwiftUI: https ://imgur.com/xxVnhY7
UIKit: https ://imgur.com/f6WBUne
题:
使用SwiftUI视图时能否获得UIKit行为?
尝试次数
我试图将UIHostingController嵌入UINavigationController内,但其行为与NavigationView完全相同。
struct ContentView: View {
var body: some View {
UIKitNavigationView {
VStack {
NavigationLink(destination: Text("Detail")) {
Text("SwiftUI")
}
}.navigationBarTitle("SwiftUI", displayMode: .inline)
}.edgesIgnoringSafeArea(.top)
}
}
struct UIKitNavigationView<Content: View>: UIViewControllerRepresentable {
var content: () -> Content
init(@ViewBuilder content: @escaping () -> Content) {
self.content = content
}
func makeUIViewController(context: Context) -> UINavigationController {
let host = UIHostingController(rootView: content())
let nvc = UINavigationController(rootViewController: host)
return nvc
}
func updateUIViewController(_ uiViewController: UINavigationController, …
Run Code Online (Sandbox Code Playgroud) 这里是一个ViewControllerA
推一个ViewControllerB
,并在ViewControllerB
该leftBarButtonItem
设置如下:
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backBtnClicked:)];
Run Code Online (Sandbox Code Playgroud)
设置后leftBarButtonItem
,后退滑动手势不起作用.是否可以保持滑动手势?
我想覆盖self.navigationItem.backBarButtonItem
的目标和行动,
我试过了:
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(backButtonOverrideAction:)];
[self.navigationItem setLeftBarButtonItem:backButton];
Run Code Online (Sandbox Code Playgroud)
它工作,但我想使用默认箭头:
我也尝试过:
UIBarButtonItem *backButton = self.navigationItem.backBarButtonItem;
[backButton setTarget:self];
[backButton setAction:@selector(backButtonOverrideAction:)];
Run Code Online (Sandbox Code Playgroud)
但不幸的是它不起作用..你知道怎么做吗?