我有一个简单的UICollectionView,其中包含具有单个UITextView的单元格。UITextView被限制在单元格的边缘,因此它们应该与单元格大小保持相同的大小。
我遇到的问题是,由于某种原因,当我通过collection view:layout:sizeForItemAtIndexPath:指定单元格大小时,这些约束不起作用。
我在Storyboard中将单元格大小设置为320x50。如果我返回的大小是sizeForItemAtIndexPath:单元格高度的2倍,则尽管我设置了限制,但UITextView保持相同的高度。我使用的是Xcode 6 GM。
我的视图控制器代码是:
@implementation TestViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.collectionView.delegate = self;
self.collectionView.dataSource = self;
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
UICollectionViewCell *c = [self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];
NSLog(@"%f", c.frame.size.height);
UITextView *tv = (UITextView *)[c viewWithTag:9];
NSLog(@"%f", tv.frame.size.height);
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 1;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
return cell;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *)collectionView.collectionViewLayout;
CGSize size = flowLayout.itemSize;
size.height = size.height * 2;
return size;
}
@end
viewDidAppear中的那些日志:给我一个输出:< br> 100.00000
50.00000
正如你所看到的,UITextView高度不随单元格高度而变化。
以下是我使用 UI 集合视图单元格中受约束的 UITextView 设置的情节提要的屏幕截图:
我知道使用自动布局约束可以很好地处理UITableViewCells和动态调整大小。我不知道为什么在这种情况下不起作用。有人有想法吗?
如果您没有子类化UICollectionViewCell
,这里是解决方案。只需在dequeueReusableCellWithReuseIdentifier:之后的cellForItemAtIndexPath下添加这两行代码
对象-C
[[cell contentView] setFrame:[cell bounds]];
[[cell contentView] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
Swift-2.0
cell.contentView.frame = cell.bounds
cell.contentView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
等效Swift代码:
override var bounds: CGRect {
didSet {
contentView.frame = bounds
}
}
嗯,我刚刚看了iOS开发者论坛。显然,这是iOS 7设备上运行的iOS 8 SDK的一个错误。解决方法是将以下内容添加到UICollectionViewCell的子类中:
- (void)setBounds:(CGRect)bounds {
[super setBounds:bounds];
self.contentView.frame = bounds;
}
override var bounds: CGRect {
didSet {
contentView.frame = bounds
}
}
你可能用过UIViewAutoresizingMask类型的一些常量,应用于当父视图改变尺寸的时候,相应UIView的frame也跟着更新的场景(通常用于横竖屏切换)。 在iOS6中,苹果介绍了自动排版机制,它和自动调整不同,并且更加复杂。 在Mac OS平台,CALayer有一个叫做layoutManager的属性可以通过CALayoutManager协议和CAConst
我正在使用这段代码,但在iOS10上,它并没有设置动画,只是在增加和减少mySubview1的高度。为什么? 同样的代码在iOS9中工作正常
我在尝试用自动布局实现一些非常基本的布局行为时遇到了困难。我的视图控制器在IB中看起来是这样的: 最上面的标签是标题标签,不知道会有多少行。我需要标题标签显示所有的文字行。我还需要另外两个标签和小的图像,以布局的权利下面的标题,但它恰巧是高的。我设置了标签和小图像之间的垂直间距约束,以及标题标签和它的超级视图之间的顶部间距约束和小图像和它的超级视图之间的底部间距约束。白色UIView没有高度限制,
我有一个包含多行< code>UILabel的< code>UIView子类。此视图使用自动布局。 我想将此视图设置为 (而不是节标题)。此标头的高度将取决于标签的文本,而标签文本又取决于设备的宽度。自动布局的场景应该很棒。 我已经找到并尝试了许多解决方案来使其工作,但无济于事。我尝试了一些事情: < li >在< code>layoutSubviews期间在每个标签上设置< code > pre
问题内容: 我是Android开发的新手,已经开始创建自己的UI。我看到您可以动态创建它,如下所示(Dynamic Layouts ): 但我也看到netbeans有一个文件 Resources- > layout-> main.xml 。因此,您可以为UI创建XML布局(声明XML布局): 所以我的问题是应该使用哪个?在Android开发中,对动态布局和XML布局有何建议和优缺点? 问题答案:
Layout(自动布局)组件可以挂载在任何节点上,将节点变成一个有自动布局功能的容器。所谓自动布局容器,就是能够自动将子节点按照一定规律排列,并可以根据节点内容的约束框总和调整自身尺寸的容器型节点。 布局模式(Layout Type) 自动布局组件有几种基本的布局模式,可以通过 Layout Type 属性进行设置,包括以下几种。 水平布局(Horizontal) Layout Type 设为 H