Tag: 自动

在代码中修改故事板自动布局约束的最佳做法?

我一直在代码中完成我的用户界面,但已经决定我应该为当前项目使用故事板和自动布局。 一切都进展顺利,直到我build立了一个复杂的场景,有大约50个观点,有很多层次和一些观点。 问题是,我的汽车布局越来越混乱的一些设备和方向。 我发现使用IB来尝试修复几十(几百?)个约束或追踪问题并解决这些问题是具有挑战性的。 情况是这样的,我没有得到错误或警告,有时只是一些不愉快的布局。 而IB可能会带来一些痛苦,所有的点击和改变设置都需要你去追踪约束信息,更不用说全面了解它们在场景中的相关性。 我刚刚花了一天时间阅读关于自动布局和约束的文档和背景材料,似乎我的最佳解决scheme是使用可视化格式来指定代码中的约束,并创build一些自定义代码来提供帮助。 但是,我似乎无法find关于如何从IB转换到代码的任何事情。 具体而言,我是否应该清除所有IB的限制,并全部手工完成,还是可以select? 我问,因为我有一些视图组包含视图的内容视图有一个完美的布局。 其次,我最好把我的代码? 我想共存故事板,只是想有select地修改一些复杂的场景。 是一个视图控制器的viewWillAppear:修改或删除/添加它所控制的视图的约束的正确位置?

为什么顶层布局指南在我的iMessage扩展中移动

我有一个iMessage扩展,我有一些问题,顶部布局指南。 我有一个MSMessagesAppViewController处理演示文稿样式之间的变化。 在我的扩展中,我有一个button。 当它被点击时,我转换到扩展演示文稿样式,然后以模态方式呈现视图控制器。 这是问题:我的第二个VC中的UI隐藏在顶部导航栏的后面。 我认为这很奇怪,因为我把约束条件设置到顶部布局指南。 所以我挖掘了我的代码,并开始debugging顶部布局指南。 我注意到,在我转换到扩展的演示文稿样式之后, topLayoutGuide.length = 86.这就是应该如此。 但是当我以模态方式呈现第二个视图控制器时,顶部布局指南将重置为0.为什么它不是86应该是? 这是我的代码: 在我的主视图控制器: @IBAction func addStickerButtonPressed(_ sender: AnyObject) { shouldPerformCreateSegue = true theSender = sender requestPresentationStyle(.expanded) } override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) { if presentationStyle == .expanded { if shouldPerformCreateSegue == true { shouldPerformCreateSegue = false performSegue(withIdentifier: "CreateStickerSegue", sender: theSender)//here is where I present […]

UICollectionViewCell 4.4和5.5英寸的dynamic大小

我有UICollectionView与故事板中的单元格。 每个单元格的大小设置为145×145。 它们在iPhone 4 – 5s上看起来不错,但是iPhone 6和6+的尺寸并不成比例。 而不是手动为每个设备设置不同的单元大小,我怎样才能dynamic地做到这一点? 在这里看到的例子:iPhone 5S: http : //prntscr.com/55vy7q,iPhone 6: http : //prntscr.com/55vyy2

如何在Xcode6中为新创build的约束禁用“相对边距”选项

我想在Xcode 6 IB中创build约束时禁用自动添加Relative to margin 。 很高兴他们默认打开这个选项,但我必须支持iOS7 ,所以事实certificate,我必须在添加新约束后每次手动禁用此选项。 我发现这个设置预先禁用它,但默认情况下它始终打开。

在iOS 8中嵌套UICollectionViews,AutoLayout和旋转

我开始使用AutoLayout进行大型项目,并对此感到惊喜。 但是,现在我不得不调整项目来适应轮换和大小类,并且我有很大的麻烦让观点行为正确。 基本的问题是,我有UICollectionViews的细胞,再次包含UICollectionViews 。 当设备旋转时,基本集合视图将其单元格调整为正确,但嵌套的集合视图中的所有单元格都不会自动调整为新的大小。 经过调查后归结为: 当调用viewWillTransitionToSize ,基础集合视图还没有旋转(如预期的那样) 在调用viewDidLayoutSubviews之后的一段时间,基础集合视图现在具有旋转的大小 – 但不幸的是,它的单元格还没有 – 它们仍然具有旋转之前的宽度 即使在coordinator animateAlongsideTransition … completion:{} block viewWillTransitionToSize单元格还没有新的宽度。 上面的意思是没有地方可以告诉嵌套集合视图的单元格来改变它们的大小,因为我还不知道新的宽度。 自动布局系统不会自动调整它们。 其他人是否有同样的问题或知道解决scheme?

我如何添加填充到UILabel的固有内容大小?

我在iOS7上使用autolayout,我有这样的问题: 我将一个UILabel放到UIView上,我正在安排自动布局约束,以便标签的centerX =父视图的centerX。 我没有给任何宽度的限制标签。 当我在运行时设置标签的文本时,标签的宽度足以让文本适合,左侧和右侧没有边距/填充。 我想要的是在左侧和右侧有一些填充,以便文本不会从标签开始的位置开始。 黑客实现这可能是设置文本为“文本”,但当然这不是要走的路:) 我怎样才能达到我想要的?

在哪里创buildsubclassed uitableviewcell的自动布局约束?

我正在尝试为我创build的uitableviewcell子类使用autolayout,我将不胜感激一些关于什么方法放置布局约束创build代码的build议。 我一直在四处search,所有的信息都是在viewDidLoad方法中添加子视图之后添加约束的。 据我所知,viewDidLoad不是一个可用的viewcell子类的选项。 我正在使用接口生成器来创build自定义单元格,并在我的代码中dynamic分配它。 没有什么特别的…我subclass的uitableviewcell,所以我可以添加一个自定义的uiview到单元格。 再次,没有什么特别的地球震惊…我的困难来了,当我尝试定位我的自定义uiview相对于我添加到界面生成器单元格中的标签。 这是创build自定义uiview并将其添加到单元格的内容视图的代码: – (id)initWithCoder:(NSCoder *)decoder { if ((self = [super initWithCoder:decoder])) { [self initSelf]; } return self; } – (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) { [self initSelf]; } return self; } – (void) initSelf { // Initialization code _badgeLabel = @""; if (!_customBadge) { _customBadge […]

如何在swift中实现关键字关联函数?

例如,当我input几个字母时,相应的单词会自动显示,然后我可以select它们。 但是如何实现这种function呢? 我应该使用哪种UI元素? 我是否也应该input世界上所有国家的绳索数据,以便得到相应的结果?

在UITableViewCell中的UILabel大小不正确(分配文本后的animation)

UILabel的文本在显示后闪烁,首先用一行上的省略号出现,然后占用它所适合的两行。请注意,单元格高度不会改变。 这是问题: 标签“Друзыя,примитеучастиеинапонитеКоробку!” ( 朋友,参加并填写框)!在视图转换期间,首先出现被截断和错位为“Друзъя,примитеучасти…”。 这只发生在iOS 8.1的iPhone 4上。 所有使用标签的操作(文本分配除外)发生在故事板中。 什么导致这个闪烁?

UITableViewCell中UILabels的布局警告不明确

我在UITableViewCell有两个相邻的UILabel视图。 左边有一条线,右边可以有多条线,并使用剩下的任何水平空间。 两个标签距离单元格顶部的距离相同。 单元格的高度由正确标签的高度决定。 在某些情况下,我在右边的UILabel上面和下面看到了不必要的额外空间,因此它们不是顶端alignment的。 hasAmbiguousLayout它,我发现hasAmbiguousLayout为这两个标签返回YES 。 当我在debugging器中调用constraintsAffectingLayoutForAxis时,我得到以下输出: (lldb) po [0x7b769520 constraintsAffectingLayoutForAxis:0] <__NSArrayM 0x7b6cb340>( <NSAutoresizingMaskLayoutConstraint:0x7b76abf0 h=–& v=–& 'UIView-Encapsulated-Layout-Left' H:|-(0)-[UITableViewCellContentView:0x7b768fc0] (Names: '|':MyTVCell:0x7b769330'MyTVCell' )>, <NSLayoutConstraint:0x7b76b010 H:|-(15)-[UILabel:0x7b769520'Number'] (Names: '|':UITableViewCellContentView:0x7b768fc0 )>, <NSContentSizeLayoutConstraint:0x7b769a90 H:[UILabel:0x7b769520'Number'(131)] Hug:250 CompressionResistance:750> ) 对于位于第一个UILabel右侧的第二个UILabel ,我得到这个: (lldb) po [0x7b769710 constraintsAffectingLayoutForAxis:0] <__NSArrayM 0x7b6cb9e0>( <NSContentSizeLayoutConstraint:0x7b769a90 H:[UILabel:0x7b769520'Number'(131)] Hug:250 CompressionResistance:750>, <NSAutoresizingMaskLayoutConstraint:0x7b76abf0 h=–& v=–& 'UIView-Encapsulated-Layout-Left' H:|-(0)-[UITableViewCellContentView:0x7b768fc0] (Names: '|':MyTVCell:0x7b769330'MyTVCell' )>, <NSLayoutConstraint:0x7b76b010 H:|-(15)-[UILabel:0x7b769520'Number'] (Names: […]