Tag: 自动布局

使用自动布局时,UIView帧会重置

我正面临一个问题。 我正在开发一个应用程序,我正在使用启用了Autolayout的 storyboard 。 现在我的UIViewControllers之一,我已经放置了一个UIView (说A)。 现在A有多个子视图( UIViews是精确的)。 我已经对A应用了“ Horizontally and Vertically centered ”约束.A内的子视图对它们没有任何限制。 现在在我的代码中,我有一个方法来animationA里面的子视图。在那个方法里面我调用UIView'sanimation方法… [UIView animateWithDuration: delay: options: animations: completion:]; 并animation的一个子视图的视图A.现在的问题是,这些帧的变化不会持续。 当我在当前的视图控制器上的视图控制器模式,然后解雇它,A内的所有子视图的框架被重置。 我search了它,发现问题是由于Autolayout发生的。 我禁用它,然后再试一次,一切运作良好。 但是,启用Autolayout的解决方法是什么? 我错过了什么…? 有趣的是,StackOverflow上的很多post都提到了这一点 当使用自动布局时,我们应该使约束animation而不是animation。 但是我没有对视图A中的子视图应用任何约束。约束只适用于视图A. 谢谢。

AutoLayout将UILabel高度设置为零

在其他视图中,我有一个用于项目描述的UILabel ,所有这些都是在界面生成器中使用约束进行布置的 – 您可以在下面的图像中看到所有相关的约束条件。 行数也被设置为0 。 我没有设置高度约束,因为我想UILabel根据它包含的文本来resize。 相反,会发生什么事 [self.view layoutIfNeeded]; 被调用时, UILabel的高度被设置为0 。 即使我没有将其他文本设置到UILabel ,它也有一个在Interface Builder中设置的Item描述的默认值。 上面的项目标题标签的设置方式是相同的,但不会被压缩到0 ,所以我有点困惑。 任何人有这种行为的经验?

如何在自定义的UITableViewCell中dynamic设置UITextView的高度和自动布局

我有UITableView,每个tableViewCell是自定义的。 在我的customTableViewCell里面是一个UITextView,TextViews框架是pin或者与它的superView是相同的tableViewCell。 我如何dynamic设置UITableViewCell高度与TextViews大小成比例,这也取决于我从互联网上获得的内容文本。 (样品原型) / /这是我如何操纵每个单元格的高度 – (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ // How do I set the height here, whats the best approach for this. with autolayout BTW } – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // I initialize every cell here with my ArrayContainer, nothing much to refer here. }

如何调整UICollectionView的高度作为UICollectionView内容大小的高度?

我想UICollectionView(红色的)缩小到这种情况下的内容大小的高度UICollectionViewCells(黄色的),因为有很多空的空间。 我所尝试的是使用: override func layoutSubviews() { super.layoutSubviews() if !__CGSizeEqualToSize(bounds.size, self.intrinsicContentSize) { self.invalidateIntrinsicContentSize() } } override var intrinsicContentSize: CGSize { return self.collection.contentSize } 但return self.collection.contentSize总是返回(宽度,0),为此,它收缩太多的高度值30(我设置在xib文件中的高度,虽然我有constaint> = 30)的值。

如何将标签的preferredMaxLayoutWidth设置为自动编程?

当我尝试在故事板中将标签的“ 首选宽度”设置为“ 自动”时 ,出现以下错误: 属性不可用:自动首选最大版面宽度在8.0之前的iOS版本上不可用 由于我需要我的布局在iOS 7和8上工作,所以我打算执行以下操作: 将值设置为故事板中的显式 。 在iOS 7上,以编程方式将该值设置为明确的计算宽度。 在iOS 8上,将该值设置为自动编程。 1和2很容易。 我如何做第3步? 有一个常数,我可以设置它? 这是我迄今为止所尝试的… 如果在故事板上将该值设置为自动,并检查preferredMaxLayoutWidth ,则会看到它为0 。 但是,试图将其设置为0,即使它已经是0,也不能正常工作(例如标签保持单行)。 例如,我尝试在故事板中将值设置为自动 ,并在viewDidLoad运行以下内容: self.label.preferredMaxLayoutWidth = self.label.preferredMaxLayoutWidth; 当我不运行上面的代码时,标签大小正确。 但是,当我运行上面的代码(应该什么都不做),它保持单行(不受欢迎的行为)。 UILabel的头文件说: // Support for constraint-based layout (auto layout) // If nonzero, this is used when determining -intrinsicContentSize for multiline labels @property(nonatomic) CGFloat preferredMaxLayoutWidth NS_AVAILABLE_IOS(6_0); 就一个常数而言,我找不到任何东西。 我能想到的最接近的常量是UITableViewAutomaticDimension ,它不起作用。 […]

在IB中使用Autolayout如何以编程方式将UIView放置在屏幕中央?

我有一个UIView,我想要在主视图上水平居中,然后在主视图上垂直居中,减去大约14个像素。 如果我用IB设置它,它可以在Retina 3.5上运行,但是在Retina 4上运行的时候,它的亮度大约是40像素。 我认为最好的解决scheme是基于屏幕高度以编程方式build立这些约束?

带dynamictypes标签的AutoLayoutdynamicUITableView单元格高度

我正在使用AutoLayout实现我的tableview单元格来显示一个图像和2个标签,使用dynamictypes自适应字体大小。 我实现了估计HeightForRowAtIndexPath,这是非常有道理的,易于使用。 我不使用界面生成器的单元格。 相反,我使用砌体,这应该没有任何区别。 我目前正在努力计算实际的细胞高度。 在更新自动布局代码时,手动计算是一件痛苦而难以维护的事情。 我发现这个StackOverFlow答案: 在UITableView中使用自动布局dynamic单元格布局和variables行高这种解决scheme还应该照顾不同的字体大小,但不适合我。 当我有这样的AutoLayout系统:UILabel顶部contentView与填充,另一个UILabel底部contentView与填充,它应该自动计算单元格的高度。 但相反,它会导致以下AutoLayout冲突: UIView property translatesAutoresizingMaskIntoConstraints) ( "<MASLayoutConstraint:0xc506be0 UIImageView:0xc5070a0.height == 150>", "<MASLayoutConstraint:0xc506d90 UIImageView:0xc5070a0.top == UITableViewCellContentView:0xc5076e0.top + 10>", "<MASLayoutConstraint:0xc506990 UILabel:0xc507450.top == UIImageView:0xc5070a0.bottom + 10>", "<MASLayoutConstraint:0xc506630 UILabel:0xc507260.top == UILabel:0xc507450.bottom>", "<MASLayoutConstraint:0xc506530 UILabel:0xc507260.bottom == UITableViewCellContentView:0xc5076e0.bottom>", "<NSAutoresizingMaskLayoutConstraint:0xc3d05a0 UITableViewCellContentView:0xc5076e0.height == 44>" ) 我使用以下AutoLayout代码: [self.subtitleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.titleLabel.mas_bottom); make.right.equalTo(self.contentView.mas_right).with.offset(-GCBaconCellRowPadding); make.left.equalTo(self.contentView.mas_left).with.offset(GCBaconCellRowPadding); make.bottom.equalTo(self.contentView.mas_bottom); }]; 最后一行应该表明单元格的高度会自行扩展。 看看AutoLayout冲突的输出,它看起来像它想要自动设置高度为44.0,这是默认值。 […]

在子视图上使用NSLayoutConstraint与仿射变换相结合

我需要有垂直滑块。 为此,我有一个包含UISlider的UIView类,并且在initWithFrame:我将滑块以仿射变换旋转90度。 我现在添加Autolayout支持。 我希望允许滑块以不同的长度进行实例化,以便能够以dynamic的Autolayout方式使用。 这是我想要获得旋转的滑块符合位于initWithFrame:中的UIView的边界的代码initWithFrame: self = [super initWithFrame:frame]; if(self) { self.slider = [[UISlider alloc] init]; [self addSubview:self.slider]; self.slider.value = 0; self.slider.transform = CGAffineTransformMakeRotation(M_PI * 1.5); [self.slider setTranslatesAutoresizingMaskIntoConstraints:NO]; [self addConstraint:[NSLayoutConstraint constraintWithItem:self.slider attribute: NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f]]; [self addConstraint:[NSLayoutConstraint constraintWithItem:self.slider attribute: NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f]]; [self addConstraint:[NSLayoutConstraint constraintWithItem:self.slider attribute: NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self […]

iOS消息单元宽度/高度使用自动布局

目标 我正在尝试使用自动布局创build一个dynamic消息单元格。 我所试过的 单元格的定位正确,大部分情况下,自动布局给定了以下限制: 问题 我的第一个问题是消息标签(可复制标签)宽度受到限制。 这似乎是通过使用setPreferredMaxLayoutWidth:解决setPreferredMaxLayoutWidth: 如此问题中所述 。 身高仍然是一个问题。 正如你所看到的,消息泡沫仍然被切断。 另外,我不确定如何确定表视图的消息单元高度。 我预计自动布局不知何故只是工作。 我已经阅读了这里的答案 ,但似乎很多的步骤。 问题 首先,自动布局比传统的帧algorithm更复杂吗? 其次,使用自动布局,我怎样才能确定最终的单元格的高度?

相对约束的自动布局不影响systemLayoutSizeFittingSize:用于UITableViewCell

我有一个UITableViewdynamic高度UITableViewCell s和我正在使用自动布局计算高度作为这个主题的优秀答案 。 到现在为止还挺好。 我正在调整应用程序以适应更大的iPhone(6和6 Plus)屏幕尺寸,而且它大多非常简单。 然而,在我的一些单元格中,我有一个图像,我想跨越单元格的整个宽度,我希望图像的高度与图像的宽度成比例(0.55 *宽度,具体)。 到目前为止,我已经在自动布局约束下,根据标准的320px纵向桌面视图宽度iPhone 6/6 Plus,硬编码了图像的宽度和高度。 我认为这会很简单,像这样(我使用PureLayout )添加一个相对高度约束: [self.myImage autoMatchDimension:ALDimensionHeight toDimension:ALDimensionWidth ofView:self withMultiplier:0.55f relation:NSLayoutRelationGreaterThanOrEqual]; 如果您不熟悉PureLayout,则转换为致电 [NSLayoutConstraint constraintWithItem: attribute: relatedBy: toItem: attribute: multiplier: constant:0.0f] 还有其他的约束,把它的边缘连接到superview,这是UITableViewCell contentView。 但是,当我调用systemLayoutSizeFittingSize:单元格的contentView时,它似乎完全忽略了相对高度约束,并且结果单元格高度太小systemLayoutSizeFittingSize:适合图像。 如果我设置了一个明确的高度约束而不是相对的约束,那就没有问题了。 同样,如果我UIImageView并在intrinsicContentSize返回一个显式的大小,没有问题。 我甚至在我的UIImageView子类中尝试了以下内容: – (void) layoutSubviews { [super layoutSubviews]; self.intrinsicSizeForAutolayout = self.frame.size; [super layoutSubviews]; } – (CGSize)intrinsicContentSize { return self.intrinsicSizeForAutolayout; } 其中intrinsicSizeForAutolayout是我为此目的定义的属性。 我认为这可能类似于为UILabel设置preferredMaxLayoutWidth解决类似问题的方式。 但不是。 […]