我有一个UIPageViewController视图控制器包含一个UIScrollView包含一个UIImageView.在加载的视图控制器中viewWillAppear,如果旋转视图,则边界不正确.这就是我试图动态地基于根据所述图像的尺寸的图像视图定位此.我试图使用,(void)viewDidLayoutSubviews但我需要调用[self.view layoutSubviews]或我得到一个断言错误.当我添加它,然后我不能再缩放图像视图.您可以看到它尝试缩放但调整大小到最小缩放.
我对自动布局完全不熟悉,并试图看看我是否遗漏了一些东西.
我目前的修复涉及检查框架的边界以查看方向是否与边界匹配.如果是这样,那么我按原样使用边界.如果没有,那么我在计算中切换高度和宽度.
我想知道如何正确使用viewDidLayoutSubviews它而不会剥夺我放大图像视图的能力.
从两个答案中,看起来viewDidLayoutSubviews布局视图可能是错误的地方.我试图找到应该在哪里完成并让视图知道它们的边界和方向,但在它们在屏幕上可见之前.从我的阅读,我认为那是,viewDidLayoutSubviews但似乎使用可能导致无限循环.
objective-c uiscrollview ios uipageviewcontroller autolayout
我正在制作一个应用程序,其中 PageViewController 应该在某个时间间隔内滚动。目前我已经完成了手动滚动。用户可以滚动任何图像,它会起作用。但坚持通过用户触摸实现自动滚动。下面是我的代码。请帮我解决这个问题。
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
_pageTitles = @[@"", @"", @"", @""];
_pageImages = @[@"page1.png", @"page2.png", @"page3.png", @"page4.png"];
// Create page view controller
self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
self.pageViewController.dataSource = self;
PageContentViewController *startingViewController = [self viewControllerAtIndex:0];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
// Change the size of page view controller
self.pageViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 50);
[self addChildViewController:_pageViewController];
[self.view addSubview:_pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];
}
- (PageContentViewController …Run Code Online (Sandbox Code Playgroud) 我是页面浏览量的新手,所以请耐心等待。
到目前为止,我看过的所有教程都向您展示了如何为 PageViewController 中的不同页面设置不同的独特 ViewController。
我正在设置一个为期 3 天的新闻提要,因此我决定在每个页面之间滑动会导致用户在日期之间切换。
因此,每个页面在UI方面完全相同,但在Data方面不同。
所以我应该能够将每个 Page 指向同一个 viewController 但指向不同的数据源。
我的数据源将是一个二维数组。是的,你猜对了,二维分隔天!每列代表一天,对应的行将是其各自页面中的表格视图。
有没有简单的方法可以让所有页面都可以访问这个数据源(数组),(在 PageViewController 中初始化),并让每个页面指向同一个 ViewController,并相应地编辑它们各自的表视图。
谢谢您的帮助 !
我在网上找到了这个代码并进行了测试.它工作但它进入无限循环.我看到一些关于func为页面索引创建新内容的帖子.
链接到我发现代码的网站:http://samwize.com/2015/10/13/how-to-create-uipageviewcontroller-in-storyboard-in-container-view/
有人愿意编辑代码以便循环结束吗?
import UIKit
class MyPageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
var pages = [UIViewController]()
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.dataSource = self
let page1: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page1")
let page2: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page2")
let page3: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page3")
pages.append(page1)
pages.append(page2)
pages.append(page3)
setViewControllers([page2], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.indexOf(viewController)!
let previousIndex = abs((currentIndex - 1) % pages.count)
return pages[previousIndex] …Run Code Online (Sandbox Code Playgroud) 我必须实现一个 UIPageViewController 作为我的 UIViewController 的子视图。UIPageViewController 内部有一些逻辑和其他 ViewController。我的问题是如何连接下面的这两段代码。
所以这是我的主要 UIViewController 代码:
class MyMainViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Run Code Online (Sandbox Code Playgroud)
和我的 UIPageViewController 代码,它实现了他包含的 ViewControllers 之间的无限循环(我复制了整个代码,可能没有必要):
class TutorialPageViewController: UIPageViewController {
private(set) lazy var orderedViewControllers: [UIViewController] = {
return [self.newColoredViewController("Green"),
self.newColoredViewController("Red"),
self.newColoredViewController("Blue")]
}()
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
if let firstViewController = orderedViewControllers.first {
setViewControllers([firstViewController],
direction: .Forward,
animated: true,
completion: nil)
}
}
private func newColoredViewController(color: String) -> UIViewController {
return UIStoryboard(name: …Run Code Online (Sandbox Code Playgroud) 我做了一个PageViewController在不同视图控制器之间切换的方法,我想显示我们看到的页面。我添加了一个pageControl,并给出了以下代码。
pageControl.currentPageIndicatorTintColor = UIColor.blueColor()
pageControl.pageIndicatorTintColor = UIColor.lightGrayColor()
pageControl.numberOfPages = pages.count
Run Code Online (Sandbox Code Playgroud)
完整代码:
import UIKit
class ViewControllerSportinfrastructuur: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
@IBOutlet weak var pageControl: UIPageControl!
var pageViewController: UIPageViewController!
let pages = ["PageOneViewController", "PageTwoViewController"]
//MARK: - page view controller data source
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
if let index = pages.indexOf(viewController.restorationIdentifier!) {
if index > 0 {
return viewControllerAtIndex(index - 1)
}
}
return nil
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? …Run Code Online (Sandbox Code Playgroud) 我正在创建一个日历应用程序,我想将其布局为 UIPageViewController 类型的样式。所以每个页面都显示一天。每个页面将完全相同(如 UI 组件中),但仅包含不同的数据。我想使用相同的 ViewController 来执行此操作,因为它显然会更整洁。但我只是想知道这是否可能?如果是这样我该怎么做呢?多谢你们。
scrollview uiviewcontroller nscalendar uipageviewcontroller swift
网页浏览中的单个或多个水平滑块会带来麻烦.用户滑动滑块的拇指而不会导致页面视图滑动.
我尝试过的变通方法
我按照http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/上的教程来实现UIPageViewController.当用户在它们之间滚动时,我需要在视图控制器之间进行转换以淡入/淡出.
这样做的应用程序示例就在这里https://itunes.apple.com/us/app/tapiture/id645402534?mt=8
objective-c uiviewcontroller uianimation ios uipageviewcontroller
所以我对Obj-C很新,并尝试查看示例代码和其他在线资源来回答我的问题,但我似乎找不到任何真正有用的东西.基本上我要做的是将我在Storyboard中创建的多个UIViewControllers添加到UIPageViewController - 我寻求帮助的第一个地方是使用PageBased应用程序模板的Xcode本身.这实际上帮助了很多,我得到了一个PageController启动和运行.然后我转向在线资源,但大多数(如果不是全部)使用单个viewController(像这样).然后我转向StackOverflow并找到以下内容 - 如何实现利用多个ViewControllers的UIPageViewController.以上资源让我走得很远:在PageViewController.h中:
#import <UIKit/UIKit.h>
@interface PageViewController : UIPageViewController <UIPageViewControllerDataSource>
@end
Run Code Online (Sandbox Code Playgroud)
在PageViewController.m中:
#import "PageViewController.h"
@interface PageViewController ()
@end
@implementation PageViewController {
NSArray *viewControllers;
UIViewController *first;
UIViewController *second;
UIViewController *third;
UIViewController *fourth;
UIViewController *fifth;
}
- (UIViewController *)first {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Secondary" bundle:nil];
first = [sb instantiateViewControllerWithIdentifier:@"1"];
return first;
}
- (UIViewController *)second {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Secondary" bundle:nil];
second = [sb instantiateViewControllerWithIdentifier:@"2"];
return second;
}
- (UIViewController *)third {
UIStoryboard *sb = …Run Code Online (Sandbox Code Playgroud) ios ×8
objective-c ×4
swift ×4
autolayout ×1
iphone ×1
nscalendar ×1
scrollview ×1
subview ×1
uianimation ×1
uiscrollview ×1
uislider ×1