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

Ios 自定义视图不使用自动布局调整大小,ios,objective-c,uiview,autolayout,Ios,Objective C,Uiview,Autolayout,注意:你不必查阅图书馆就能理解这个问题,我只是把它提出来作为参考 我用xcode实现。我在视图中插入它的方式是:我使用自动布局将UIView插入到视图控制器,然后在Identity inspector中将类设置为DIDatepicker 问题是,DIDatepicker无法根据视图大小调整大小。我在想一个可能的解决方案是,在viewDidLoad中将DIDatePicker设置为视图的类,尽管我不知道如何做 我的问题是:如果我的理论是正确的,我如何将DIDatePicker设置为视图的类。如果

注意:你不必查阅图书馆就能理解这个问题,我只是把它提出来作为参考

我用xcode实现。我在
视图
中插入它的方式是:我使用
自动布局
UIView
插入到
视图控制器
,然后在Identity inspector中将类设置为
DIDatepicker

问题是,
DIDatepicker
无法根据视图大小调整大小。我在想一个可能的解决方案是,在
viewDidLoad
中将
DIDatePicker
设置为
视图的类
,尽管我不知道如何做

我的问题是:如果我的理论是正确的,我如何将
DIDatePicker
设置为
视图的类
。如果我说的不是真的,我如何使
DIDatePicker
使用
视图调整大小


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的“理论”是否正确,但是您应该能够通过选择视图控制器中的默认“视图”并在其上设置自定义类来测试它。您不需要首先添加UIView,只需使用View控制器附带的UIView即可。

因此我遇到了与您相同的问题

问题是,当您构建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


希望这有帮助

您需要向视图添加约束,以将其大小调整为其父视图哪个视图,
DIDatePicker
(collectionView)或视图
DIDatePicket
位于?DIDatePicker视图是否确定?因为
DIDatepicker
是实际的
视图
,(它是
视图
的类)。另外,我不能同时访问这两个文件,因为它们在不同的文件中初始化。Eric,我不太理解你的问题。但根据我的理解,您在IB中正确设置了类类型,不需要在
viewdidload
中再次设置类。就大小而言-您是否创建了适当的约束?您的回答根本没有解决这个问题。我不能使用该视图,因为视图控制器中还有其他内容。