标签: ios-autolayout

什么是NSLayoutConstraint"UIView-Encapsulated-Layout-Height",我应该如何强制它干净地重新计算?

UITableView在iOS 8下运行,并且我在故事板中使用来自约束的自动单元格高度.

我的一个单元格包含一个UITextView,我需要它根据用户输入收缩和扩展 - 点击缩小/扩展文本.

我这样做是通过向文本视图添加运行时约束并更改约束上的常量以响应用户事件:

-(void)collapse:(BOOL)collapse; {

    _collapsed = collapse;

    if(collapse)
            [_collapsedtextHeightConstraint setConstant: kCollapsedHeight]; // 70.0
        else
            [_collapsedtextHeightConstraint setConstant: [self idealCellHeightToShowFullText]];

    [self setNeedsUpdateConstraints];

}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我将其包装在tableView更新中并致电[tableView setNeedsUpdateConstraints]:

[tableView beginUpdates];

[_briefCell collapse:!_showFullBriefText];

[tableView setNeedsUpdateConstraints];
// I have also tried 
// [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
// with exactly the same results.

[tableView endUpdates];
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我的单元格确实扩展(并在进行动画时动画)但是我得到一个约束警告:

2014-07-31 13:29:51.792 OneFlatEarth[5505:730175] Unable to simultaneously satisfy constraints.

Probably at least one of the constraints in the following list is one …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch uitableview ios autolayout ios-autolayout

243
推荐指数
9
解决办法
8万
查看次数

UITableView动态单元格高度仅在某些滚动后才能正确显示

我有一个使用自动布局在故事板中定义UITableView的自UITableViewCell定义.细胞有几条多线UILabels.

UITableView出现要正确计算单元格高度,但在最初的几个细胞高度不正确的标签之间的分歧.滚动一下后,一切都按预期工作(即使是最初不正确的单元格).

- (void)viewDidLoad {
    [super viewDidLoad]
    // ...
    self.tableView.rowHeight = UITableViewAutomaticDimension;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    TableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TestCell"];
    // ...
    // Set label.text for variable length string.
    return cell;
}
Run Code Online (Sandbox Code Playgroud)

有什么我可能会遗漏,导致自动布局在前几次无法完成其工作吗?

我已经创建了一个演示此行为的示例项目.

示例项目:首次加载时示例项目的表格视图顶部. 示例项目:向下滚动和备份后的相同单元格.

uitableview ios autolayout ios8 ios-autolayout

107
推荐指数
9
解决办法
5万
查看次数

什么是Xcode 8中的"特征变化"?

我正在使用AutoLayout和Size类,但随着iOS 10和新Xcode 8.0的发布,有一个新选项Vary for Traits.这是替换尺寸Classe不同的宽度和高度的设备.

在此输入图像描述

通过选择width复选框,它会显示varying 14 compact width devices.

在此输入图像描述

通过选择height复选框,它会显示varying 18 compact height devices.

在此输入图像描述

通过选择两个复选框,它将显示varying 11 compact width regular height devices.

在此输入图像描述

如何利用这个选项?我们可以像使用Xcode7.0一样使用大小类的AutoLayout吗?如果任何人有深入的知识,那么请解释一下.

ios ios-autolayout ios10 xcode8

79
推荐指数
3
解决办法
5万
查看次数

如何以编程方式更新UIView的恒定高度约束?

我有一个UIView和我使用Xcode Interface Builder设置约束.

现在我需要以UIView's编程方式更新高度常量.

有一个功能myUIView.updateConstraints(),但我不知道如何使用它.

xcode autolayout nslayoutconstraint swift ios-autolayout

78
推荐指数
8
解决办法
10万
查看次数

如何在视图之间创建具有可变间距的UIStackView?

我有一个简单的横向 UIStackView,里面堆叠了几个UIViews.我的目标是在视图之间创建可变间距.我很清楚我可以使用"spacing"属性在子视图之间创建恒定的空间.但是我的目标是创建可变空间.请注意,如果可能的话,我希望避免使用充当间隔物的隐形视图.

我想出的最好的方法是将我UIViews的内容包装起来UIStackView,并layoutMarginsRelativeArrangement = YES用来尊重内部堆栈的布局边距.我希望我可以做任何类似的事情UIView而不诉诸于这种丑陋的工作.这是我的示例代码:

// Create stack view
UIStackView *stackView = [[UIStackView alloc] init];
stackView.translatesAutoresizingMaskIntoConstraints = NO;
stackView.axis = UILayoutConstraintAxisHorizontal;
stackView.alignment = UIStackViewAlignmentCenter;
stackView.layoutMarginsRelativeArrangement = YES;

// Create subview
UIView *view1 = [[UIView alloc] init];
view1.translatesAutoresizingMaskIntoConstraints = NO;
// ... Add Auto Layout constraints for height / width
// ...
// I was hoping the layoutMargins would be respected, but they are not
view1.layoutMargins = UIEdgeInsetsMake(0, 25, 0, 0);

// …
Run Code Online (Sandbox Code Playgroud)

ios-autolayout ios9 uistackview

62
推荐指数
2
解决办法
3万
查看次数

在iOS 12中,何时使用UICollectionView布局单元格,在nib中使用autolayout

像这样的代码

collectionLayout.estimatedItemSize = CGSize(width: 50, height: 25)
collectionLayout.itemSize = UICollectionViewFlowLayoutAutomaticSize
collectionLayout.minimumInteritemSpacing = 10 

for _ in 0 ..< 1000 {
    let length = Int(arc4random() % 8)
    let string = randomKeyByBitLength(length)
    array.append(string!)
}
collectionView.reloadData()
Run Code Online (Sandbox Code Playgroud)

细胞限制:

在此输入图像描述

当我在iOS 12上运行它时,它是不同的.左模拟器是iOS 11,右边是iOS 12:

在此输入图像描述

但是,当我滚动它时,细胞的帧将是正常的.


重现问题的示例项目:https://github.com/Coeur/StackOverflow51375566

ios uicollectionview ios-autolayout ios12 xcode10

44
推荐指数
5
解决办法
2万
查看次数

如何使用自动布局保持圆形imageView轮?

如何将矩形图像视图转换为可以在自动布局中保持形状而不设置宽度和高度限制的圆形图像视图?从而允许imageView定义它的大小,并且相对于其周围的对象,其大小越来越小,具有前导,尾随,顶部和底部约束.

前几天我问了一个类似的问题,但我认为这可能会以更简洁的方式提出.非常感谢!

编辑

好的,我开始尝试尽可能简单.我有一个名为"Cell"的视图和一个名为"dog"的UIImageView,就是这样.我不再在控制台中"无法同时满足约束",只是使用自动布局的两个简单视图.我仍在尝试使用此代码来绕过UIImageView:

profileImageView.layer.cornerRadius = profileImageView.frame.size.width / 2
profileImageView.clipsToBounds = true
Run Code Online (Sandbox Code Playgroud)

这是单元格约束设置:

截图1

这是配置文件pic约束设置:

截图2

这是没有代码的结果,没有舍入,但是很好和正方形:

截图3

以下是圆形代码的结果:

截图4

这对我来说没有意义,因为没有舍入代码,图像是方形的,并且代码是菱形的.如果它是正方形不应该是一个没有问题的圆圈?

编辑2

这是当我删除底部约束并为superview添加相同高度的.637乘数时发生的情况.

截图5

xcode ios autolayout swift ios-autolayout

41
推荐指数
5
解决办法
2万
查看次数

如何以编程方式删除从故事板添加的约束?

我用谷歌搜索但没有找到答案.所以我需要问一下.我有一个主屏幕.当用户登录时,它将显示一个视图,如下图所示 在此输入图像描述 现在,当用户退出并访问主页时,他将看到上面的布局,但没有中心框的布局.如果我将该布局设置为隐藏,则它现在显示如下. 在此输入图像描述

我想将第三个布局移到上面一点点以移除空白区域..

我使用故事板添加了约束.现在需要从编程中删除约束并添加一个约束,将布局设置为低于第一个布局.

ios xcode-storyboard ios-autolayout

38
推荐指数
6
解决办法
6万
查看次数

Swift默认AlertViewController突破约束

我正在尝试使用样式为.actionSheet的默认AlertViewController。由于某种原因,警报导致约束错误。只要没有通过按钮触发(显示)alertController,整个视图就不会出现约束错误。难道这是Xcode错误?

我得到的确切错误如下所示:

2019-04-12 15:33:29.584076+0200 Appname[4688:39368] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x6000025a1e50 UIView:0x7f88fcf6ce60.width == - 16   (active)>"
)

Will attempt to recover by breaking …
Run Code Online (Sandbox Code Playgroud)

iphone xcode ios swift ios-autolayout

37
推荐指数
4
解决办法
2232
查看次数

Swift动态表格单元格高度

我有原型单元的tableview,在单元格中我有imageview和一些文本.文本标签是原型单元格中的一个,但有时它不止一行,我在服务器调用后将数据加载到表视图中.故事板行中的标签设置为0,换行符设置为Word Wrap.我也试过http://candycode.io/automatically-resizing-uitableviewcells-with-dynamic-text-height-using-auto-layout/

但没有效果.如果我在UITableView中使用自动布局用于动态单元格布局和变量行高度 一切正常,因为标签文本是预定义的,但是我从服务器加载数据并在API调用后重新加载tableView,然后标签就是一条线.

height uitableview ios ios-autolayout

33
推荐指数
2
解决办法
6万
查看次数