容器视图未正确定位

4

我有一个设置,其中我使用了一个导航控制器(Navigation Controller),它包括一个容器视图(Container View),嵌入了一个页面视图控制器(Page View Controller)和其内容。

enter image description here 从左侧开始: UINavigationController, 我的类MTNewsViewController继承自UIViewController并实现UIPageViewControllerDataSource(保存了一个容器视图), UIPageViewController, 我的类MTNewsContentController继承自UIViewController。

我已经成功地在页面控制器中插入了许多带有自定义文本和图像的页面。但是,问题是 容器视图的位置和大小。它没有按照图片故事板的建议定位,而是来自左上角并具有另一种大小。如下所示:

enter image description here

我不确定缺少什么。

这里有一些代码片段。您有什么建议可以解决问题吗?我怀疑我需要在某个地方设置大小。

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 constraints

输入图片描述


很难在没有项目的情况下说出真实的布局,因为图片不能展示运行时的布局。你在使用Storyboards吗?你是如何管理布局的?(自动布局,弹簧与条纹等) - Helge Becker
是的,我正在使用故事板。但是我不确定你的第二个问题是什么? - 7heViking
2个回答

0

我认为您很可能没有在容器视图上设置布局约束。因此,它在运行时可能与您的故事板中不同。该容器视图必须水平和垂直地受到约束。您可以选择容器视图,然后在按住Ctrl键的同时将其拖动到其父视图中。然后会弹出一个约束菜单。按住Shift键并选择前四个选项,它们是安全区域内的前导和尾随空格以及上下空格。确保每个选项旁边都有一个勾号。然后再次尝试运行您的应用程序。


由于这是相同的建议,我的回答也相同:这些已经被添加了。我已经添加了它们的图片。 - 7heViking

0

看起来你没有在任何地方设置自动布局约束。打开故事板 -> 选择你的容器视图 -> 选择图像上突出显示的布局选项 enter image description here -> 根据你的要求设置顶部、左侧、右侧和底部约束,然后点击添加/保存。这应该就是你需要的全部。


我刚刚双重检查了。它们已经被设置好了。我已经添加了一个容器视图的约束图像。 - 7heViking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接