自定义视图不使用自动布局调整大小

Posted

技术标签:

【中文标题】自定义视图不使用自动布局调整大小【英文标题】:Custom view not resizing with auto-layout 【发布时间】:2015-06-03 03:09:18 【问题描述】:

注意:您不必检查库即可理解问题,我只是提出来供参考。

我在 xcode 中实现了DIDatePicker。我将它插入view 的方式是:我用auto-layoutUIView 插入viewController,然后在身份检查器中将类设置为DIDatepicker

问题是,DIDatepicker 不会调整到视图的大小。我在想一个可能的解决方案可能是将DIDatePicker 设置为viewDidLoad 中的view's class,尽管我不知道该怎么做。

我的问题是:如果我的理论是正确的,我如何将DIDatePicker 设置为view's class。如果我说的不是真的,我怎样才能让DIDatePickerview 调整大小?


DIDatePicker 有一个collectionView;这是它的定义方式:

UICollectionViewFlowLayout *collectionViewLayout = [[UICollectionViewFlowLayout alloc] init]; 
[collectionViewLayout setItemSize:CGSizeMake(kDIDatepickerItemWidth, CGRectGetHeight(self.bounds))]; 
[collectionViewLayout setSectionInset:UIEdgeInsetsMake(0, kDIDatepickerSpaceBetweenItems, 0, kDIDatepickerSpaceBetweenItems)]; 
[collectionViewLayout setMinimumLineSpacing:kDIDatepickerSpaceBetweenItems];

_datesCollectionView = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:collectionViewLayout]; 

【问题讨论】:

您需要为视图添加约束以将其调整到其父视图的大小 哪个视图,DIDatePicker (collectionView) 或视图DIDatePicket 在中? DIDatePicker 视图 你确定吗?因为DIDatepicker 是实际的view,(它是view 的类)。另外,我不能同时访问它们,因为它们是在不同的文件中初始化的。 埃里克,我不太明白你的问题。但根据我的理解 - 您在 IB 中正确设置了类类型,您不需要在 viewdidload 中再次设置类。就大小而言 - 您是否创建了适当的约束? 【参考方案1】:

所以我和你有同样的问题。

问题在于,当您构建 DIDatepicker 时,它会根据视图的原始帧而不是自动布局发生后的帧构建自己的集合视图。

避免这个问题的方法是不制作类 DIDatepicker 的故事板 UIView。相反,只需使用普通的 UIView,然后在 ViewDidLoad 方法中创建一个与 UIView 具有相同框架的 DIDatepicker 实例。

这是一个例子。 datePickerView 是故事板中的 UIView。

datepicker = DIDatepicker(frame: CGRectMake(datePickerView.frame.origin.x, datePickerView.frame.origin.y , self.view.frame.width, datePickerView.frame.height));
self.view.addSubview(datepicker!);

如果这不起作用,请尝试更改框架并将其作为子视图而不是主视图添加到 datePickerView。

希望这会有所帮助!

【讨论】:

【参考方案2】:

我不完全确定您关于将主视图设置为 DIDatepicker 的“理论”是否正确,但您应该能够通过选择视图控制器中的默认“视图”并设置自定义类来测试它在那。您不需要先添加 UIView,只需使用 View Controller 附带的 UIView。

【讨论】:

您的回答根本没有解决问题。 我不能使用那个视图,因为我在视图控制器中有其他东西。

以上是关于自定义视图不使用自动布局调整大小的主要内容,如果未能解决你的问题,请参考以下文章

(自动布局)容器视图调整大小但子视图不

在自定义容器视图中旋转时 AutoLayout 不会调整视图大小?

如何使用Android自定义视图中的属性设置调整膨胀布局的大小?

调整自定义视图的报告大小以包括绘制的图形

UICollectionView:使用动画和自定义布局调整单元格大小

使用窗口调整自定义视图的大小