ios - ContainerView 位置不正确

标签 ios objective-c uipagecontrol uicontainerview

我有一个设置,我使用导航 Controller ,其中包括一个嵌入页面 View Controller 及其内容的容器 View 。

enter image description here
从左起:UINavigationController,我的类 MTNewsViewController 继承自 UIViewController 并实现 UIPageViewControllerDataSource(持有容器 View ),UIPageViewController,我的类 MTNewsContentController 继承自 UIViewController。

我已经设法使用自定义文本和图像将许多页面插入到页面 Controller 中。但是,问题是容器 View 的位置和大小 .它不像图像 Storyboard建议的那样定位,而是从左上角和另一个尺寸定位。像这样:

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 约束

enter image description here

最佳答案

我认为您很可能没有对容器 View 施加布局约束。
因此,它在运行时的显示方式可能与您的 Storyboard中的显示方式不同。
该容器 View 必须在水平和垂直方向上都受到约束。
您可以选择容器 View ,然后在按住 Ctrl 键的同时将其拖动到其父 View 。
然后会弹出一个约束菜单。
按住shift键,选择前四个空格到安全区,上下空格到安全区。确保在每个旁边都有一个勾号。然后再次尝试运行您的应用程序。

关于ios - ContainerView 位置不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59788533/

相关文章:

ios - GLK View Controller : Setting up independent objects using GLKit

ios - 如何在 swift 3 中将 NSArray 转换为 Swift 数组

objective-c - UITableView 粘在 UISearchBar 上

iphone - 如何在 iOS 上播放从套接字手动加载的视频?

IOS视差和PageControll

iOS Swift MKMapView 删除 map 图 block

ios - 使用 UIWebView 进行基本身份验证

iphone - Xcode 4.1 有超过 400 个编译错误

ios - 在 UITableViewCell 的 imageView 中添加 UIPagerControl

ios - UIPageControl 中的控制 "active"点