我想隐藏某个 VC 上的页面控制指示器,而是显示一个带有文本“开始”的按钮。然而,用户仍然能够导航回页面控件。
我试过这个:
self.pageController = [UIPageControl appearance];
self.pageController.pageIndicatorTintColor = [UIColor redColor];
self.pageController.currentPageIndicatorTintColor = [UIColor greenColor];
if(self.pageIndex == 1){
self.pageController.hidden = YES;
NSLog(@"hide you!");
}
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用。不使用 if 语句的设置self.pageController.hidden = YES也有效,并且也会触发 nslog。看来这只能设置一次。
我也不知道这会有多顺利。我显然不希望它在用户完全到达页面本身时发生变化,而是在向页面过渡时发生变化。
解决这个问题的最佳方法是什么?
cocoa-touch objective-c uipagecontrol ios uipageviewcontroller
我试图确保中间值 Lists 是构建我的应用程序时看到的第一个视图。Xcode 提供if let firstView = viewList.first,if let firstView = viewList.last但我无法练习如何选择中间值。
lazy var viewList:[UIViewController] = {
let sb = UIStoryboard(name: "Main", bundle: nil)
let lists = sb.instantiateViewController(withIdentifier: "Lists")
let reminders = sb.instantiateViewController(withIdentifier: "Reminders")
let todo = sb.instantiateViewController(withIdentifier: "To Do")
return [reminders, lists, todo]
}()
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
if let firstView = viewList.first {
self.setViewControllers([firstView], direction: .forward, animated: true, completion: nil)
}
}
Run Code Online (Sandbox Code Playgroud) 我有带有PageView小部件的简单页面,里面有ListView. 以及滚动PageView不起作用的地方。原因很简单。因为指针事件被嵌套的子进程消耗。
@override
Widget build(BuildContext context) {
setupController();
return PageView(
controller: controllerPage,
scrollDirection: Axis.vertical,
children: <Widget>[
ListView.builder(
controller: controller,
padding: EdgeInsets.all(AppDimens.bounds),
itemCount: 15,
itemBuilder: (context, index){
return Container(
height: 100,
color: index %2 == 0
? Colors.amber : Colors.blueAccent,
);
},
),
Container(color: Colors.green),
Container(color: Colors.blue),
],
);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是有什么明智的方法可以让它一起工作吗?您可能会看到 的垂直轴,但使用 的水平轴和水平轴PageView会出现完全相同的问题。PageViewListView
到目前为止我已经尝试过什么?我有一些解决方法。即使它并不复杂,但感觉不太好而且笨重。通过使用AbsorbPointer自定义控制器进行滚动。
final controller = ScrollController();
final controllerPage = PageController(keepPage: true);
bool hasNestedScroll = true; …Run Code Online (Sandbox Code Playgroud) 我有一个Pickerwith.pickerStyle(SegmentedPickerStyle())使其成为分段控件。我想让页面在之间平滑滑动,而不是使用条件语句替换视图。
这是我迄今为止所做的 gif:
这是到目前为止的代码(由 控制if,而不是在不同页面之间切换):
struct AuthView: View {
@State private var authPath = 0
/* ... */
var body: some View {
VStack {
Picker(selection: $authPath, label: Text("Authentication Path")) {
Text("Log In").tag(0)
Text("Sign Up").tag(1)
}
.pickerStyle(SegmentedPickerStyle())
Spacer()
if authPath == 0 {
LogInView(/* ... */)
} else {
SignUpView(/* ... */)
}
Spacer()
}
.padding()
.background(Color("Color.Background").edgesIgnoringSafeArea(.all))
}
}
Run Code Online (Sandbox Code Playgroud)
我想要类似的东西UIPageViewController。如果有 SwiftUI 版本或好的替代方案,那确实会有帮助。
但是,如果我确实需要使用 UIKit UIViewRepresentable,我不知道如何使用 SwiftUI 来实现它。
我试图了解Apple的基于页面的应用程序的默认模板.该模板显示了一种日历,每年的每个月都有一页.
在没有任何更改的情况下编译模板时,我注意到一些奇怪的东西 当应用程序启动时,它以纵向模式显示,并且 - 在翻阅某些页面(例如,到6月)后 - 您更改旋转,它以横向模式重新加载显示两个页面,但是从1月开始.但这只发生一次.在随后的方向更改中,它然后跳转到正确的"currentViewController".
这个代码似乎来自RootViewController文件,具体来说
UIViewController *currentViewController = self.pageViewController.viewControllers[0];
Run Code Online (Sandbox Code Playgroud)
坦率地说,第一次定位改变似乎被忽略了.
我想知道为什么?
我正在创建一个应用程序,我试图让一个pagescrollviewcontroller滑动屏幕,并让顶部的"导航"栏标题滚动实时与标题我有标题栏视图作为自定义视图,我能够访问滚动委托自定义滚动视图和网页浏览控制器的方法.然而.我没看到如何访问实时滚动pos?我知道这是可能的,因为twitter做到了(真的不应该在任何人的词汇中),但我不知道如何实现这一目标.
照片
主页标题在与页面控制器相同的滚动位置滑动.
当前代码:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
if(scrollView.tag == 100) {
CGPoint point = CGPointMake(mainScrollView.contentOffset.x * 1,0);
[titleSwipe setContentOffset:point animated:YES];
}
else {
mainScrollView.contentOffset = CGPointMake(0,1);
[mainScrollView setContentOffset:titleSwipe.contentOffset animated:YES];
}
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate: (BOOL)decelerate {
CGPoint point = CGPointMake(mainScrollView.contentOffset.x * 2,0);
[titleSwipe setContentOffset:point animated:YES];
}
Run Code Online (Sandbox Code Playgroud) 我在iOs应用程序中使用页面视图控制器.如何从此控制器中删除点?
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.dontShowChecked = NO;
self.imagesArray = @[ ..];
self.textsArray = @[ ........
];
// Create page view controller
self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"WTPageController"];
self.pageViewController.dataSource = self;
WTDetailViewController *startingViewController = [self viewControllerAtIndex:0];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
// Change the size of page view controller
CGFloat delta = [[PSDeviceInfo sharedInstance] is_iPhone] ? 50. : 50;
self.pageViewController.view.frame = CGRectMake(0, 40., self.view.frame.size.width, self.view.frame.size.height - delta);
[self.view …Run Code Online (Sandbox Code Playgroud) 设置:我正在尝试创建一个带有嵌入式UIPageViewController的ViewController,它有4个页面,每个页面都是自己的ViewController.
问题:滚动时总是重复第二个视图.例如,使用View1,View2,View3,View4滚动显示View1,View2,View2,View3,View4然后向后滚动具有此顺序View4,View3,View3,View2,View1即使页面控件准确.
这是我的页面视图控制器类:
import UIKit
class HostGamePageViewController: ROLViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {
// Constants
let ViewControllers: NSArray = ["HostGameTest1", "HostGameTest2", "HostGameTest3", "HostGameTest4"]
// Properties
var pageViewController: UIPageViewController!
var currentViewController: String!
// UI
@IBOutlet var pageControl: UIPageControl!
override func viewDidLoad() {
super.viewDidLoad()
pageViewController = storyboard?.instantiateViewControllerWithIdentifier("HGPageViewController") as? UIPageViewController
pageViewController.delegate = self
pageViewController.dataSource = self
let startingViewController = viewControllerAtIndex(0)!
pageViewController.setViewControllers([startingViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: {done in })
addChildViewController(pageViewController)
view.addSubview(pageViewController.view)
pageViewController.view.frame = view.bounds
pageViewController.didMoveToParentViewController(self)
view.gestureRecognizers = pageViewController.gestureRecognizers
// Setup …Run Code Online (Sandbox Code Playgroud) 我认为这个问题的答案一般会解决Objective-C协议的问题,但这是我遇到的第一个这类问题.
我期望在实现UIPageViewControllerDataSourceWithConnections时使用这些方法.
import UIKit
protocol UIPageViewControllerDataSourceWithConnections: UIPageViewControllerDataSource {
var connectedViewControllers: [UIViewController] {get}
}
extension UIPageViewControllerDataSourceWithConnections {
func pageViewController(pageViewController: UIPageViewController,
viewControllerBeforeViewController viewController: UIViewController
) -> UIViewController? {return connectedViewController(
current: viewController,
adjustIndex: -
)}
func pageViewController(pageViewController: UIPageViewController,
viewControllerAfterViewController viewController: UIViewController
) -> UIViewController? {return connectedViewController(
current: viewController,
adjustIndex: +
)}
private func connectedViewController(
current viewController: UIViewController,
adjustIndex: (Int, Int) -> Int
) -> UIViewController? {
let requestedIndex = adjustIndex(connectedViewControllers.indexOf(viewController)!, 1)
return connectedViewControllers.indices.contains(requestedIndex) ?
connectedViewControllers[requestedIndex] : nil
}
func presentationCountForPageViewController(pageViewController: UIPageViewController) …Run Code Online (Sandbox Code Playgroud) 我试图设计一个包含滑动部分的屏幕.我有一个带有一个imageview的屏幕,底部有两个按钮.我想只滑动imageview而不是底部区域.屏幕是这样的
目前问题是整个屏幕也包括按钮.
这是我的代码
ViewController.swift
import UIKit
class ViewController: UIViewController, UIPageViewControllerDataSource {
var pageImages:NSArray!
var pageViewController:UIPageViewController!
override func viewDidLoad() {
super.viewDidLoad()
pageImages = NSArray(objects: "startscreen1","startscreen2","startscreen3")
self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("MyPageViewController") as! UIPageViewController
self.pageViewController.dataSource = self
let initialContenViewController = self.pageTutorialAtIndex(0) as TutorialScreenViewController
let viewControllers = NSArray(object: initialContenViewController)
self.pageViewController.setViewControllers(viewControllers as! [UIViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)
/* self.pageViewController.setViewControllers(viewControllers as [AnyObject], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)*/
self.pageViewController.view.frame = CGRectMake(0, 100, self.view.frame.size.width, self.view.frame.size.height-100)
self.addChildViewController(self.pageViewController)
self.view.addSubview(self.pageViewController.view)
self.pageViewController.didMoveToParentViewController(self)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of …Run Code Online (Sandbox Code Playgroud) ios ×6
swift ×5
objective-c ×3
arrays ×1
cocoa-touch ×1
flutter ×1
ios6 ×1
iphone ×1
protocols ×1
scroll ×1
swiftui ×1
uiscrollview ×1
xcode ×1