【发布时间】:2020-05-04 09:52:06
【问题描述】:
我有一个使用导航控制器的设置,其中包含一个容器视图,该容器视图嵌入了一个页面视图控制器及其内容。
左起:UINavigationController,我的类 MTNewsViewController 继承自 UIViewController 并实现 UIPageViewControllerDataSource(持有容器视图),UIPageViewController,我的类 MTNewsContentController,它继承自 UIViewController。
我已经成功地在页面控制器中插入了一些带有自定义文本和图像的页面。但是,问题在于容器视图的位置和大小。它不是像故事板所建议的那样定位,而是从左上角以另一个尺寸定位。像这样:
我不确定缺少什么。
这里有一些代码 sn-ps。您对可能出现的问题有什么建议吗?我怀疑我需要在某个地方设置大小。
MTNewViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Create page view controller
self.pageViewController.dataSource = self;
[self loadNews];
MTNewsContentController *startingViewController = [self viewControllerAtIndex:0];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:_pageViewController];
[self.view addSubview:_pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];
UIPageControl* pageControlDots = [UIPageControl appearanceWhenContainedInInstancesOfClasses:@[[MTNewsViewController class]]];
pageControlDots.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControlDots.currentPageIndicatorTintColor = [UIColor blackColor];
pageControlDots.hidesForSinglePage = YES;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
self.pageViewController = segue.destinationViewController;
self.pageViewController.view.frame = segue.destinationViewController.view.frame;
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger index = [self getCurrentPageIndex:viewController];
if ((index == 0) || (index == NSNotFound)) {
return nil;
}
return [self viewControllerAtIndex:--index];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger index = [self getCurrentPageIndex:viewController];
if (index == NSNotFound) {
return nil;
}
if (++index == news.size()) {
return nil;
}
return [self viewControllerAtIndex:index];
}
- (MTNewsContentController *)viewControllerAtIndex:(NSUInteger)index
{
if ((news.size() == 0) || (index >= news.size())) {
return nil;
}
// Create a new view controller and pass suitable data.
MTNewsContentController *newPage = [self.storyboard instantiateViewControllerWithIdentifier:@"NewsPageContentController"];
newPage.imagePath = [NSString stringWithCString:news[index].kImagePath.c_str() encoding:NSUTF8StringEncoding];
newPage.textDescription = [NSString stringWithCString:news[index].kDescription.c_str() encoding:NSUTF8StringEncoding];
newPage.pageIndex = index;
return newPage;
}
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
return news.size();
}
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
return 0;
}
- (NSUInteger)getCurrentPageIndex:(UIViewController *)viewController {
return ((MTNewsContentController*) viewController).pageIndex;
}
MTNewsContentController
这里没什么特别的。只需以编程方式添加图像和一些文本。
ContainerView 约束
【问题讨论】:
-
很难说没有项目,因为图像在运行时不会显示真实的布局。你在使用故事板吗?你如何管理布局? (自动布局、Spings 和 Struts、..)
-
是的,我正在使用情节提要。但不确定您的第二个问题?
标签: ios objective-c uipagecontrol uicontainerview