【问题标题】:ContainerView it not located correctContainerView 它的位置不正确
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 因为这是相同的建议,所以我有相同的答案 :) 他们已经添加了。我已经添加了他们的图片。
【解决方案2】:

您似乎没有在任何地方设置一些自动布局约束。打开故事板 -> 选择您的容器视图 -> 选择图像 上突出显示的布局选项 -> 根据您的要求设置顶部、左侧、右侧和底部约束,然后单击添加/保存。这应该就是您所需要的。

【讨论】:

  • 我只是仔细检查了一遍。它们已经设置好了。我添加了 ContainerView 的约束图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多