我有一个复杂的视图层次结构,内置在Interface Builder中,具有嵌套的UIStackViews.每次隐藏一些内部堆栈视图时,我都会收到"不满意的约束"通知.我跟踪到了这个:
(
"<NSLayoutConstraint:0x1396632d0 'UISV-canvas-connection' UIStackView:0x1392c5020.top == UILabel:0x13960cd30'Also available on iBooks'.top>",
"<NSLayoutConstraint:0x139663470 'UISV-canvas-connection' V:[UIButton:0x139554f80]-(0)-| (Names: '|':UIStackView:0x1392c5020 )>",
"<NSLayoutConstraint:0x139552350 'UISV-hiding' V:[UIStackView:0x1392c5020(0)]>",
"<NSLayoutConstraint:0x139663890 'UISV-spacing' V:[UILabel:0x13960cd30'Also available on iBooks']-(8)-[UIButton:0x139554f80]>"
)
Run Code Online (Sandbox Code Playgroud)
具体来说,UISV-spacing约束:当隐藏UIStackView时,它的高约束得到一个0常量,但这似乎与内部stackview的间距约束发生冲突:它需要我的Label和Button之间有8个点,这与隐藏约束是不可调和的,因此约束崩溃.
有没有解决的办法?我已经尝试递归隐藏隐藏堆栈视图的所有内部StackViews,但这导致奇怪的动画,其中内容浮出屏幕,并导致严重的FPS下降启动,同时仍然没有解决问题.
我经常看到自动布局约束被添加UIViewController到我看来,这似乎是布局逻辑的错误位置.
可以NSLayoutConstraint在自定义中添加s UIView吗?
在哪里UIView可以通过编程方式添加它们?
什么是自动布局 - 它做了什么,是iOS 5的功能吗?
由于新的iPhone 5有一个更大的屏幕,所以如何优化你的应用程序的选项归结为自动布局.
你能指点我一些关于自动布局的文章,以及我如何使它适应我的项目?
如何使用自动布局以编程方式将UIView设置为其超级视图的中心?
UIButton* viewObj = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[viewObj setTranslatesAutoresizingMaskIntoConstraints:NO];
[viewObj setBackgroundColor:[UIColor greenColor]];
[self.view addSubview:viewObj];
NSLayoutConstraint* cn = [NSLayoutConstraint constraintWithItem:viewObj
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0];
[self.view addConstraint:cn];
cn = [NSLayoutConstraint constraintWithItem:viewObj
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterY
multiplier:1.0
constant:0];
[self.view addConstraint:cn];
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于UIButton,但是我在使用适用于UIView的东西替换第一行时遇到了麻烦.
我试过了
UIView* viewObj = [UIView alloc] initWithFrame:CGRectZero];
Run Code Online (Sandbox Code Playgroud)
但视图不会出现在模拟器中.
有什么建议?
谢谢!
我对这张海报有类似的问题.我使用了jrturton的建议来移动用于自定义按钮的代码viewDidLayoutSubviews.它一直运行良好,直到我收到此错误:
'NSInternalInconsistencyException',原因:'将-viewDidLayoutSubviews发送到视图控制器后仍需要自动布局.ViewController的实现需要将-layoutSubviews发送到视图以调用自动布局.
我对图形非常无能为力,我唯一能想到的就是放弃,[self.view layoutSubviews];但是没有修复任何东西.它在我的故事板中取消选中"自动布局"时有效,但这改变了我的按钮的尺寸,我想知道是否还有其他方法可以修复它?
码:
-(void)viewDidLayoutSubviews {
NSArray *arrayOfButtons = [NSArray arrayWithObjects:self.decimalButton, self.buttonOne, self.buttonTwo, self.buttonThree, nil];
for (UIButton *button in arrayOfButtons) {
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
button.layer.borderWidth = 0.25f;
button.layer.borderColor = [[UIColor grayColor] CGColor];
CAGradientLayer *btnGradient = [CAGradientLayer layer];
btnGradient.frame = button.bounds;
btnGradient.colors = [NSArray arrayWithObjects:
(id)[[UIColor colorWithRed:122.0f / 255.0f green:188.0f / 255.0f blue:255.0f / 255.0f alpha:1.0f] CGColor],
(id)[[UIColor colorWithRed:96.0f / 255.0f green:171.0f / 255.0f blue:248.0f / 255.0f alpha:1.0f] CGColor], …Run Code Online (Sandbox Code Playgroud) 自动布局,尽管它是好的,让我疯狂的约束.我有在IB设计的肖像模式,但我无法获得所需的横向方向.

请注意,当方向更改为横向时,UIImageView块之间的间距会减小,并且SAMPLE TEXT更改的文本对齐方式会右对齐.
目前,我已经为它添加了一些限制.但是,我需要保持UIImageView块之间的空间固定,因此它看起来像肖像和景观中的精细.我需要将它均匀地分布在肖像中并在景观中压缩(如上图所示).同样,目前我的约束会调出文本,但它不会将其保持在屏幕的中心并且右对齐.
自动布局可以实现这一点吗?如果是这样,怎么样?非常感谢.
我正在努力解决一些菜鸟问题.我有一个UIView显示一些价格.我想要UIView根据价格的动态宽度,如果是1欧元,那么它将是例如20pt,如果它是2300欧元,那么它将像50pt宽度一样.
我试图使用故事板的约束但没有运气.是否可以在故事板中进行,或者我是否必须计算宽度UILabel然后以UIView编程方式设置宽度?
先感谢您.
我正在尝试使用Swift UITaleViewCell在UITableViewXCode6中实现动态高度.
我通过图形化设置约束来布置我的单元格(屏幕截图来自XCode5,因为XCode6上有NDA).我还将BodyLabel的换行符属性设置为"自动换行",并将行号设置为"0"以允许多行.

现在,如果我只是在tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?)方法内部设置单元格的内容,那么我就可以正确获得动态高度行为.
但是,由于我按照在线提供的教程(特别是这个),我添加了另一种方法来确定细胞的高度tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!).在我关注的教程中,它告诉我添加cell.layoutIfNeeded(),所以我也添加了.
override func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
var cell = tableView!.dequeueReusableCellWithIdentifier(kCellIdentifier) as GroupFeedCell
// Configure the cell
if let frc = self.fetchedResultsController {
let feed = frc.objectAtIndexPath(indexPath) as GroupFeed
cell.titleLabel.text = feed.name
if let message = feed.message {
cell.bodyLabel.text = message
}
}
// Layout the cell
cell.layoutIfNeeded()
// Get the height
var …Run Code Online (Sandbox Code Playgroud) 如何为UIImageView/UIView设置autolayout,以便iphone 6和6 plus的图像视图宽度和高度增加一点.我已经尝试添加约束宽高比,但增加的高度和宽度非常大.无论如何设置约束高度和图像视图的宽度可以手动设置为iPhone 6和6加.看一下屏幕截图,iphone 6和6 plus中的图像视图应该比它现在显示的要小一些.

似乎有几个不同的选项/术语,iOS社区中的人在布局方面使用(例如,UIEdgeInsets是一种类型,但有时我会听到/读取"设置插图"或布局边距与布局指南).
我总能找到一个有效的选项.但我不确定我是否正在使用合适的工具.
有人可以帮助在布局的这些不同方面之间提供一些清晰度,以及何时以最佳方式使用每个方面?
autolayout ×10
ios ×9
cocoa-touch ×2
iphone ×2
objective-c ×2
swift ×2
uiview ×2
xcode ×2
layout ×1
uibutton ×1
uiimageview ×1
uikit ×1
uistackview ×1
uitableview ×1
view ×1
xcode6 ×1
xib ×1