小编sim*_*mon的帖子

iOS Autolayout:调整大小父视图中的UILabel问题

我有一个只包含UILabel的视图.此标签包含多行文字.父级具有可变宽度,可以使用平移手势调整大小.我的问题是,当我这样做时,调整UILabel的大小不会重新计算其高度,使得所有内容仍然可见,它只是将其切断.

我已经设法通过一些黑客来修复它但运行速度非常慢:

- (void)layoutSubviews {

    CGSize labelSize = [self.labelDescription sizeThatFits:CGSizeMake(self.frame.size.width, FLT_MAX)];

    if (self.constraintHeight) {
        [self removeConstraint:self.constraintHeight];
    }

    self.constraintHeight = [NSLayoutConstraint constraintWithItem:self.labelDescription attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:labelSize.height];

    [self addConstraint:self.constraintHeight];

    [super layoutSubviews];
}
Run Code Online (Sandbox Code Playgroud)

这不应该自动布局自动发生吗?

编辑

我的观点结构是:

UIScrollView
---> UIView
     ---> UILabel
Run Code Online (Sandbox Code Playgroud)

以下是UIScrollView的约束:

<NSLayoutConstraint:0x120c4860 H:|-(>=32)-[DescriptionView:0x85c81c0]   (Names: '|':UIScrollView:0x85db650 )>,
<NSLayoutConstraint:0x120c48a0 H:|-(32@900)-[DescriptionView:0x85c81c0] priority:900   (Names: '|':UIScrollView:0x85db650 )>,
<NSLayoutConstraint:0x120c48e0 H:[DescriptionView:0x85c81c0(<=576)]>,
<NSLayoutConstraint:0x120c4920 H:[DescriptionView:0x85c81c0]-(>=32)-|   (Names: '|':UIScrollView:0x85db650 )>,
<NSLayoutConstraint:0x120c4960 H:[DescriptionView:0x85c81c0]-(32@900)-| priority:900   (Names: '|':UIScrollView:0x85db650 )>,
<NSLayoutConstraint:0x8301450 DescriptionView:0x85c81c0.centerX == UIScrollView:0x85db650.centerX>,
Run Code Online (Sandbox Code Playgroud)

以下是UIView的约束:

<NSLayoutConstraint:0x85c4580 V:|-(0)-[UILabel:0x85bc7b0]   (Names: '|':DescriptionView:0x85c81c0 )>,
<NSLayoutConstraint:0x85c45c0 H:|-(0)-[UILabel:0x85bc7b0]   (Names: '|':DescriptionView:0x85c81c0 )>, …
Run Code Online (Sandbox Code Playgroud)

ios autolayout ios6

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

在iOS上使用autolayout如何指定视图应占用尽可能多的空间?

我在iOS中使用autolayout尝试构建具有流体宽度的布局.我目前使用的约束的可视格式是:

[self.scrollViewContainer addConstraints:[NSLayoutConstraint 
     constraintsWithVisualFormat:@"H:|-(>=32)-[viewToAdd(<=576)]-(>=32)-|" 
                         options:0 
                         metrics:nil  
                           views:NSDictionaryOfVariableBindings(viewToAdd)
]];
Run Code Online (Sandbox Code Playgroud)

也就是说:我希望两边至少有32px的间距,我希望它viewToAdd的最大宽度为576px.这很好用,除了我希望在viewToAdd满足所有约束的同时耗尽任何可用空间.目前,我viewToAdd只能获得与其固有内容大小一样宽的内容,并且间距会根据需要增长.

有没有办法指定viewToAdd应该尽可能大?

ios autolayout ios6

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

iOS 8和layoutMargin中的自定义UITableViewCells

我的应用程序中有几个自定义UITableViewCells,主要由nibs定义.移动到iOS 8和Xcode 6时,左右边距不正确.这些单元格通常散布在具有默认单元格的表格视图中.

我做了一个示例项目,这是我正在谈论的保证金问题: 保证金问题

我能找到的唯一与此相关的是新物业layoutMargins.对于UITableViewCells,其值似乎会根据运行应用程序的设备而改变:

iPhone 6 and below - layoutMargin: {8, 16, 8, 16}
iPhone 6 Plus - layoutMargin: {8, 20, 8, 20}
Run Code Online (Sandbox Code Playgroud)

这似乎与我在标准单元格上看到的边缘对齐.但是,对于我的定制单元的内容是在细胞内contentView,它具有标准的UIView layoutMargin{8, 8, 8, 8}.这意味着绑定到Container Margin的任何自动布局约束都会添加不正确的间距.

我发现解决这个问题的唯一方法是添加以下内容 cellForRowAtIndexPath:

cell.contentView.layoutMargins = cell.layoutMargins;
Run Code Online (Sandbox Code Playgroud)

这似乎不是一个非常好的解决方案(特别是因为我需要将它包装在iOS8的支票中以保持兼容性).

有没有人有任何想法?我觉得我必须遗漏一些东西.

objective-c uitableview ios8

11
推荐指数
2
解决办法
9387
查看次数

UIPageViewController禁用滚动

我正在使用带有transitionStyle UIPageViewControllerTransitionStyleScroll和navigationOrientation 的UIPageViewControllerUIPageViewControllerNavigationOrientationVertical

我也有一个UIPanGestureRecognizer视图,我想在平移手势处于活动状态时禁用页面滚动.

我想在手势开始时设置以下内容:

pageViewController.view.userInteractionEnabled = NO;
Run Code Online (Sandbox Code Playgroud)

这似乎没有任何效果,或者似乎偶尔起作用.

我发现做它的唯一另一种方法(工作)是在平移手势运行时将UIPageViewController dataSource设置为nil,但这会在重置dataSource时造成巨大延迟.

uipageviewcontroller ios6

10
推荐指数
1
解决办法
8818
查看次数