Tag: nslayoutconstraint

带iOS自动布局约束的UIScrollView:子视图的大小错误

我试图在代码中生成一个视图。 这里是我的视图对象的层次结构 UIScrollView中 的UIView 的UIButton ScrollView应该与窗口大小相同。 button应该尽可能大。 我使用iOS自动布局,所以我的所有对象的约束string看起来像这样 H:|[object]| V:|[object]| 我也为每个对象设置了translatesAutoresizingMaskIntoConstraints为NO 。 问题是,button只获取默认的button大小。 它的父视图对象(UIView)只获取其子视图所需的大小。 红色:UIScrollView /黄色:UIView 我怎样才能强制这些意见像scrollView一样大? 当我使用UIView而不是UIScrollView时,一切都很好… 这是一些代码: – (void) viewDidLoad { [super viewDidLoad]; // SCROLL VIEW UIScrollView* scrollView = [UIScrollView new]; scrollView.backgroundColor=[UIColor redColor]; scrollView.translatesAutoresizingMaskIntoConstraints = NO; //CONTAINER VIEW UIView *containerView = [UIView new]; containerView.translatesAutoresizingMaskIntoConstraints = NO; containerView.backgroundColor = [UIColor yellowColor]; [scrollView addSubview:containerView]; // […]

自动布局自动旋转时,如何重新排列视图?

我经常遇到这样的问题,我希望以一种方式来安排我的意见,而对于风景来说却有一种截然不同的方式。 对于一个简单的例子,请考虑以下几点: 肖像: 景观: 请注意,纵向上的图像是垂直堆叠的,但在横向上,它们是并排的? 当然,我可以手动计算位置和大小,但是对于更复杂的视图,这很快变得复杂。 另外,我更喜欢使用Autolayout,所以有更less的设备特定的代码(如果有的话)。 但是,这似乎是很多 Autolayout代码来编写的。 有没有办法通过故事板设置这种东西的约束?

以编程方式设置约束

我正在试验如何使用UIScrollView。 经过很多麻烦,我终于得到了它的挂钩。 但现在我似乎又遇到了另一个障碍。 在这个简单的应用程序,我有一个滚动视图,为了它的工作,我必须设置视图的底部空间滚动视图约束为0,如这里所述,它工作正常。 我正在通过IB来完成。 现在我遇到了一个场景,我必须通过编程来完成这个部分。 我在viewDidLoad方法中添加了下面的代码。 NSLayoutConstraint *bottomSpaceConstraint = [NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.scrollView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0]; [self.view addConstraint:bottomSpaceConstraint]; 但似乎没有工作。 它在控制台窗口中输出以下消息,我不知道该怎么做。 无法同时满足约束。 下面列表中的至less一个约束可能是你不想要的。 试试这个:(1)看看每一个约束,试图找出你不期望的; (2)find添加不需要的约束或约束的代码并修复它。 (注意:如果你看到你不明白的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性的文档translatesAutoresizingMaskIntoConstraints)(“”,“”) 有人可以告诉我如何做到这一点? 我还附加了一个演示项目,以便您可以更好地了解这个问题。 更新: 首先谢谢你的回应。 使用答案中提到的方式,我能够得到它的工作。 然而,略有不同的情况下,它不是。 现在我试图以编程方式将视图加载到viewcontroller。 如果我可以进一步解释。 有2个视图控制器。 第一个是UITableViewController ,第二个是UIViewController 。 里面有一个UIScrollView 。 另外还有多个UIView ,其中一些视图的高度超出了屏幕的正常高度。 UITableViewController显示一个选项列表。 根据用户的select,一个特定的UIView将被加载到带有UIScrollView的UIViewController 。 在这种情况下,上述方法不起作用。 滚动没有发生。 我是否需要单独加载视图才能做一些不同的事情? 我已经在这里上传了一个演示项目,这样你就可以看到它的实际运行。 请参阅Email.xib并从表格视图列表中select电子邮件 。

移动视图与约束

我在视图控制器中有几个视图,当检测到向上滑动时向上移动,然后在检测到向下滑动时向下移动。 我通过使用CGRectOffset调整y原点来迫使视图移动。 现在,我已经对IB的视图应用了约束,我不确定最佳的方式来移动视图,以便他们在iPhone 5,6和6 +的最终位置。 目前我正在做这样的事情: [self.view layoutIfNeeded]; self.panFrameVerticalConstraint.constant = self.panFrameVerticalConstraint.constant +338; [UIView animateWithDuration:5 animations:^{ [self.view layoutIfNeeded]; }]; 用比例来改变常量是否更好? 所以对于上面的约束,而不是使用338,最好是这样做: self.panFrameVerticalConstraint.constant = self.panFrameVerticalConstraint.constant + (self.panView.frame.size.height/1.680); //self.panView.frame.size.height = 568 //(568/1.680) = 338

在tableHeaderView中使用自动布局

我有一个包含多行UILabel的UIView子类。 该视图使用自动布局。 我想将此视图设置为UITableView ( 而不是节标题)的tableHeaderView 。 该标题的高度将取决于标签的文字,而标签的文字又取决于设备的宽度。 这种场景自动布局应该是伟大的。 我发现并尝试了很多 很多的 解决scheme来获得这个工作,但无济于事。 我尝试过的一些事情: layoutSubviews期间在每个标签上设置preferredMaxLayoutWidth 定义一个intrinsicContentSize 试图找出所需的视图大小,并手动设置tableHeaderView的框架。 在设置标题时为视图添加宽度约束 一堆其他的东西 我遇到的一些各种失败: 标签延伸超出视图的宽度,不包裹 帧的高度是0 应用程序崩溃, Auto Layout still required after executing -layoutSubviews 解决scheme(或者解决scheme,如果需要的话)应该适用于iOS 7和iOS 8.请注意,所有这些都是以编程方式完成的。 我已经build立了一个小样本项目 ,以防你想破解这个问题。 我已将我的努力重新设置到以下的起点: SCAMessageView *header = [[SCAMessageView alloc] init]; header.titleLabel.text = @"Warning"; header.subtitleLabel.text = @"This is a message with enough text to span multiple […]

如何在iOS自动布局中为button添加等间距和等宽

在Xcode中,自动布局约束是新的。 我有一个像UITabBar 6 UIButtons底视图。 没有限制,我将这些button与每个button的5个空格填充alignment,每个button都有50个宽度。 现在,我试图通过使用自动布局来支持所有的屏幕尺寸。 在故事板约束中,我为6个button设置了相等的宽度,并在每个button之间创build了60个空间。 我将第一个button0设置为前导空格,并将最后一个button0设置为尾部约束。 我希望所有设备尺寸的视图之间buttons with equal width and flexible spaces的buttons with equal width and flexible spaces 。 任何人都可以请求帮助我吗? 寻求帮助。 提前致谢。

无法与IB中的约束build立出口连接

我使用iOS 7运行XCode 5,我需要在布局之前dynamic更改UITextView的高度约束。 我见过很多贴子,说明这可以通过从IB中的约束到源代码的sockets连接来完成。 我正在尝试从IB的约束出口连接到拥有的类的头文件,但无法build立连接 – 当我拖动头文件时,IB不会“突出显示”,就像在进行连接时一样从其他物体如button等 有没有人遇到过这个? 所有的帮助,非常感谢。

将子视图的X置于自动布局中将引发“未准备好约束”

我有一个自定义的UIView子类正在通过一个笔尖初始化。 在-awakeFromNib ,我创build了一个子视图,并尝试将它置于其超视图中。 [self setInteralView: [[UIView alloc] init]]; [[self internalView] addConstraint: [NSLayoutConstraint constraintWithItem: [self internalView] attribute: NSLayoutAttributeCenterX relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeCenterX multiplier: 1 constant: 0]]; 这打破了,并导致以下输出: 2013-08-11 17:58:29.628 MyApp[32414:a0b] The view hierarchy is not prepared for the constraint: <NSLayoutConstraint:0xc1dcc80 UIView:0xc132a40.centerX == MyView:0xc1315a0.centerX> When added to a view, the constraint's items must be descendants […]