Ios 自定义视图不使用自动布局调整大小
注意:你不必查阅图书馆就能理解这个问题,我只是把它提出来作为参考 我用xcode实现。我在Ios 自定义视图不使用自动布局调整大小,ios,objective-c,uiview,autolayout,Ios,Objective C,Uiview,Autolayout,注意:你不必查阅图书馆就能理解这个问题,我只是把它提出来作为参考 我用xcode实现。我在视图中插入它的方式是:我使用自动布局将UIView插入到视图控制器,然后在Identity inspector中将类设置为DIDatepicker 问题是,DIDatepicker无法根据视图大小调整大小。我在想一个可能的解决方案是,在viewDidLoad中将DIDatePicker设置为视图的类,尽管我不知道如何做 我的问题是:如果我的理论是正确的,我如何将DIDatePicker设置为视图的类。如果
视图
中插入它的方式是:我使用自动布局
将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
中再次设置类。就大小而言-您是否创建了适当的约束?您的回答根本没有解决这个问题。我不能使用该视图,因为视图控制器中还有其他内容。