我正在使用滑块开发图像库,但在过渡样式模式下自动插入时UIPageViewController
遇到问题。UIPageViewController
Scroll
这是我的布局:
UIViewController
带UIContainerView
(洋红色背景)UIPageViewController
链接到容器(来自 #1)- 页面控制器中动态创建
UIViewController(s)
的视图列表(来自 #2),全宽高视图(1.橙色,2.红色,3.绿色)
它曾经可以正常工作很长时间并继续与 iOS 11 一起工作,除非它在具有安全区域的 iPhone X 设备上呈现:
我检查了很多不同的选项,并且能够确认它与页面控制器的滚动模式特别相关。如果我切换到 PageCurl 过渡样式 - 它按预期工作(全高):
页面控制器没有公开很多选项来控制滚动模式的这种行为,我也无法通过搜索控件树和修改各种相关属性来“破解insets
”它frame
。contentSize
我可以清楚地看到,一旦创建了视图控制器,我的滚动视图contentSize
就会frame
比34px
容器小frame
> view.frame
{{X=0,Y=0,Width=375,Height=732}}
Bottom: 732
Height: 732
IsEmpty: false
Left: 0
Location: {{X=0, Y=0}}
Right: 375
Size: {{Width=375, Height=732}}
Top: 0
Width: 375
X: 0
Y: 0
> scroll.frame
{{X=-5,Y=0,Width=385,Height=698}}
Bottom: 698
Height: 698
IsEmpty: false
Left: -5
Location: {{X=-5, Y=0}}
Right: 380
Size: {{Width=385, Height=698}}
Top: 0
Width: 385
X: -5
Y: 0
> scroll.contentSize
{{Width=1155, Height=698}}
Height: 698
IsEmpty: false
Width: 1155
我还设置了我的自动布局约束以链接到超级视图而不是安全区域:
这是我的家庭控制器代码,其余的都设置在情节提要中(警告:C# Xamarin 语法)
private List<UIViewController> viewControllers;
public HomePageViewController (IntPtr handle) : base ( handle)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
var child1 = new UIViewController();
child1.View.BackgroundColor = UIColor.Orange;
var child2 = new UIViewController();
child2.View.BackgroundColor = UIColor.Red;
var child3 = new UIViewController();
child3.View.BackgroundColor = UIColor.Green;
this.viewControllers = new List<UIViewController>
{
child1,
child2,
child3,
};
this.SetViewControllers(new UIViewController[] { child1 }, UIPageViewControllerNavigationDirection.Forward, false, null);
this.GetNextViewController = (c, r) =>
{
var current = this.viewControllers.IndexOf(this.ViewControllers[0]);
if (current >= this.viewControllers.Count - 1)
return null;
return this.viewControllers[current + 1];
};
this.GetPreviousViewController = (c, r) =>
{
var current = this.viewControllers.IndexOf(this.ViewControllers[0]);
if (current <= 0)
return null;
return this.viewControllers[current - 1];
};
}
如何强制我的子视图控制器具有全高(等于父容器的框架高度)?