相关疑难解决方法(0)

如何在隐藏视图时使用自动布局移动其他视图?

我在IB中设计了自定义Cell,将其子类化并将我的插座连接到我的自定义类.我在单元格内容中有三个子视图:UIView(cdView)和两个标签(titleLabel和emailLabel).根据每行可用的数据,有时我想在我的单元格中显示UIView和两个标签,有时只有两个标签.我想要做的是设置约束,如果我将UIView属性设置为隐藏或我将从superview中删除它,两个标签将移动到左侧.我尝试将UIView前导约束设置为10px的Superview(单元格内容)和UILabels将10 px的约束引导到下一个视图(UIView).稍后在我的代码中

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(IndexPath *)indexPath {
...
Record *record = [self.records objectAtIndex:indexPath.row];

if ([record.imageURL is equalToString:@""]) {
     cell.cdView.hidden = YES;
}
Run Code Online (Sandbox Code Playgroud)

我隐藏了我的cell.cdView,我希望标签向左移动,但是它们在Cell中保持相同的位置.我试图从superview中删除cell.cdView,但它也没有用.我附上图片来澄清我的意思.

细胞

我知道如何以编程方式执行此操作,而我不是在寻找解决方案.我想要的是在IB中设置约束,并且如果删除或隐藏其他视图,我希望我的子视图将动态移动.是否可以在具有自动布局的IB中执行此操作?

.....
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch interface-builder ios autolayout

321
推荐指数
12
解决办法
16万
查看次数

隐藏UIViews的AutoLayout?

我觉得这是一个相当常见的范例,显示/隐藏UIViews,通常UILabels,取决于业务逻辑.我的问题是,使用AutoLayout响应隐藏视图的最佳方式是什么,就像它们的帧是0x0一样.以下是1-3个功能的动态列表示例.

动态功能列表

现在我从按钮到最后一个标签有一个10px的顶部空间,当标签被隐藏时,显然不会向上滑动.到目前为止,我创建了这个约束的出口,并根据我显示的标签数量修改常量.这显然有点hacky,因为我使用负常量值将按钮向上推到隐藏的帧上.这也很糟糕,因为它不受实际布局元素的限制,只是基于其他元素的已知高度/填充的偷偷摸摸的静态计算,并且明显地与AutoLayout的构建作斗争.

我显然可以根据我的动态标签创建新的约束,但这是很多微观管理和尝试折叠一些空白的很多冗长.有更好的方法吗?更改帧大小0,0并让AutoLayout在没有约束操作的情况下完成它的工作?完全删除视图?

但老实说,只需从隐藏视图的上下文修改常量,只需要一行代码就可以进行简单的计算.重新创建新的约束 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:似乎很重.

编辑2018年2月:用UIStackViews 来看Ben的回答

objective-c ios autolayout

160
推荐指数
7
解决办法
9万
查看次数

使用Scroll View和Autolayout Swift

我知道这个问题已被多次询问,但这是我长期以来一直在努力的问题,我确信其他人也是如此,即使有当前的答案和教程.

添加滚动视图时,我将执行以下步骤:

  1. 在视图控制器中添加滚动视图作为原始视图的子视图.顶部,左侧,右侧和底部.确保"限制利润率"不受限制.

  2. 添加UIView作为Scroll View的子视图.引脚顶部,左侧,右侧和底部约束.

  3. 在内容视图和视图控制器视图之间添加相等的宽度约束.

此时我运行应用程序时内容视图不会出现,滚动视图占用整个屏幕.

  1. 接下来,我向内容视图添加元素,其中包含4个UIViews来测试所有内容.我给出了每个UIView的顶部,左侧和右侧约束.而最后一个UIView是一个底部约束.

此时,当我运行应用程序时,内容视图和滚动视图各占据屏幕的大约一半,我可以滚动内容视图.见下图.

我已经按照我可以找到的每个教程进行了操作,并尝试实现我找到的所有SO答案,但我似乎无法让它工作.如果有人遇到此问题或知道解决方案,我们将非常感谢您的帮助!

绿色是内容视图,蓝色是滚动视图

在此输入图像描述

滚动视图和子视图约束

在此输入图像描述

user-interface uiscrollview ios autolayout swift

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

为以编程方式生成的视图实现自动布局

我有一个应用程序,其视图以编程方式生成.例:

-(void)loadView
{
    [super loadView];

// SET TOP LEFT BTN FOR NEXT VIEW
UIBarButtonItem *topLeftBtn = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = topLeftBtn;
[topLeftBtn release];

// programmatically set up the view for cart tableView
CGRect iouTableViewFrame = CGRectMake(0, 0, 320, 348);
iouTableView = [[UITableView alloc]initWithFrame:iouTableViewFrame style:UITableViewStylePlain];
[[self iouTableView] setDelegate:self];
[[self iouTableView] setDataSource:self];
[[self view] addSubview:iouTableView];

// set up the summary label
CGRect summaryTableFrame = CGRectMake(0, 348, 320, 18);
UILabel *summaryTableLabel = [[UILabel alloc] initWithFrame:summaryTableFrame];
[summaryTableLabel setFont:[UIFont fontWithName:@"Helvetica" size:14]]; …
Run Code Online (Sandbox Code Playgroud)

interface-builder uiview ios autolayout ios6

9
推荐指数
1
解决办法
2万
查看次数