Tag: autolayout

UITableView使用AutoLayout自动调整页眉和页脚视图的大小

在本文中,我将尝试揭露UITableView类的一些怪癖,并向您展示实现可变高度的页眉和页脚视图的最简单方法。 对我来说,编写UI的简单性实际上根本就是不编写任何UI。 在本文中,我将尽可能多地使用界面生成器🙂 我将仅出于简单起见谈论页眉,但页脚也完全一样。 TableView设定 分组样式表或纯样式TableView的标题与UITableView的任何其他行都没有不同。 设置实际上非常简单。 需要设置sectionHeaderHeight和estimatedHeaderHeight 。 UITableView.automaticDimension是使AutoLayout能够在运行时计算每个单元格的高度的工具。 应该将EstimatedHeaderHeight设置为对其内容的总高度的粗略估计,以显示滚动指示器。 在情节提要中选择TableView时,可以在“大小”检查器中设置这些属性。 创建标题视图 tableView(_:viewForHeaderInSection:)应该返回UIView的实例,但是您猜怎么着? UITableViewCell是UIView的子类。 这意味着我们可以使用情节提要板创建一个原型单元,该单元将从该函数中出队并返回。 我认为,这是在一个位置声明所有视图的最干净的方法,而不是将许多xibs散布在整个项目或在代码中声明为原型的单元或其他单元中。 我创建了一个原型单元,该单元由左侧的ImageView,标题和字幕标签组成。 在此项目的任何地方都没有设置静态高度。 我们希望自动布局根据标签的固有内容大小(将在运行时由其内容定义)来计算单元格的高度。 标签包装在StackView中,并限制在单元格内容视图的所有四个侧面。 我更喜欢在创建视图时使用StackView来减少定义的约束数量。 为了返回视图,我们调用dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell? 。 我们不使用此函数的forIndexPath:风格,因为我们没有为标头行定义indexPath。 同样, forIndexPath:断言为出队的单元格定义了一个重用标识符,以防止返回nil。 在我们的情况下,可以显示没有标题的部分。 警卫让headerCell = tableView.dequeueReusableCell(withIdentifier:“ header”)else { 返回零 } 空白部分标题 通过设计,如果在组样式表视图中没有为节定义标题,则框架将呈现30像素的空白视图。 苹果公司认为将不同的部分作为一个部分出现看起来很奇怪。 有时,我们只是想违反规则。 ♀️ 要解决此问题,可以使用CGFLOAT_MIN常量。 它代表CGFloat的最小非负值。 对于32位和64位代码,值分别为1.17549435e-38F或2.2250738585072014e-308。 毕竟,它不是零像素。 另一方面,在纯样式表视图中,标题高度可以设置为大于或等于0的任何值。 对于这种特殊情况,我们需要使用tableView(_:estimatedHeightForHeaderInSection:)和tableView(_:heightForHeaderInSection:) 。 如文档中所述,必须实现这两个功能以定义自定义视图的高度。 结论 我很困惑地看到想要实现高度变化的标头的人对StackOverflow有如此多的攻击。 这是我在使用TableView时一直使用的简单技巧,希望它对您和我一样有用。 […]

构建像Lego这样的应用程序—教程11

动态尺寸 1.简介 在教程10中,我们完成了“新闻”单元格中的属性。 当我们在运行时查看单元格时,详细信息文本和图像都被截断并且没有显示其全部内容。 在本教程11中,我们将采用一些机制来允许内容增长,并使单元自动设置其大小。 2.默认像元高度 创建NewsTableViewCell布局时,我们在顶部和底部边距处都包含了约束。 这使单元可以确定显示所有内容所需的高度(即“内部内容大小”)。 如果文本或图像变大,则单元格知道它需要更高的高度。 默认情况下,表格视图将自动确定其单元格的高度以适合其内容。 👉选择“新闻”场景中的两个单元格。 一种方法是单击一个单元格,然后在单击另一个单元格的同时按住shift键。 选择大小检查器(标尺图标)。 Size在“大小”检查器中的“ Row Height标签旁边,关闭“ Custom复选框。 Row Height字段将更改为Default 。 画布中的单元格缩小到44点高。 您将不再看到内容。 👉运行应用程序。 在运行时,表格视图动态设置单元格的高度以匹配内容。 但是,在设计时,仅看到单元格高44点并不能为我们提供有用的预览。 这是一个难题。 如果我们使用自定义高度,则设计时间单元格是有用的高度,但是它们不会在运行时进行调整。 如果使用默认高度,则在设计时压缩单元格内容,但在运行时动态调整。 幸运的是,我们可以选择将单元格的高度设置为Interface Builder中看起来不错的值(即在设计时),并修改视图控制器以动态设置每个单元格的高度以适合其运行时的内容。 3.查看控制器单元的高度 如前所述,每个场景都有一个“视图控制器”,其中包含运行它的代码。 顾名思义,视图控制器在运行时控制场景内的所有视图(包括单元格的高度)。 我们需要视图控制器中的代码来动态调整像元高度。 幸运的是,这些代码已经在BFWControl框架中为我们编写了。 首先,让我们将Interface Builder中的单元格恢复为有用的预览高度。 👉切换回Xcode。 在仍选中两个单元格的情况下,在“大小”检查器中,将“ Row Height输入为220 。 我们可以输入我们喜欢的任何行高,以便合理地预览情节提要中的单元格。 我们也可以像以前一样通过拖动单元格的底部手柄来调整它们的高度。 其次,我们将告诉视图控制器在运行时设置每个单元格的高度,以匹配其内容的固有高度。 我们只需要将News视图控制器更改为AdjustingTableViewController并打开其intrinsicHeightCells属性即可。 clicking通过单击标题栏中的黄色图标来选择表视图控制器。 在右侧面板中选择“身份检查器”。 👉在Identity Inspector中的“ Class字段中,键入Adj然后从弹出菜单中选择AdjustingTableViewController 。 点击Return或Tab (在键盘上)。 Xcode应该以BFWControls自动输入Module […]

Autolayout的程序化UIScrollview

因此,在阅读了Apple网站上的技术说明并阅读了有关使用Autolayout的UIScrollview的iOS 11编程的matt neuburg的书之后,我无法完全理解它如何运作的概念。 基本上我想要的是一个Scrollview ,它有一个子视图ChildView ,其中这个子视图有一个Textview 。 下面我附上了我试图以编程方式实现no-nibs,没有故事板的模型。 至于代码,这就是我通常提出的: 码 let Scroller: UIScrollView = { let scroll = UIScrollView() scroll.translatesAutoresizingMaskIntoConstraints = false scroll.backgroundColor = UIColor.alizarinColor() return scroll }() // Content view let ContentView : UIView = { let content = UIView() content.translatesAutoresizingMaskIntoConstraints = false content.backgroundColor = UIColor.blue return content }() override func viewDidLoad() { super.viewDidLoad() […]

Autolayoutdevise适应iPhone 3.5英寸和iPhone 4英寸屏幕尺寸

我正在创build一个通用应用程序。 现在我想在屏幕上放置两个button: 我尝试了自动布局和界面生成器(iOSdevise器),但我只设法适应一个屏幕尺寸(例如3.5英寸显示器)的button。 因此,我将button的大小和间距设置为顶部(超级视图的顶部和上面的button的底部)。 但有没有一种方法适应屏幕尺寸? 例如,button的宽度是视图宽度减去一定的差距。 或者像图片中的button居中(一个会很容易)? 这可能吗? 比另一种select是在代码中做所有事情(创buildbutton并创build约束)。 在这里,我可以查询视图宽度等,以相应地创build我的button。 这是唯一的方法吗? 如何pipe理? 编辑: 现在我在视图控制器上放置了一个空标签。 在这个标签上,我添加了以下限制: 将中心Yalignment到:Superview,等于:0 将中心Xalignment到:Superview,等于:0 在我的button上,我设置了一个固定的高度和宽度。 比超级视图的尾部空间等于50(水平对中作品,因为两个屏幕尺寸具有相同的宽度)。 顶部的button有以下约束: 将中心Yalignment:标签,等于:20 底部的button获取: 顶部空间:标签,等于:20 不知道为什么它需要不同的约束,但在GUI编辑器中,我采取了button的底部或顶部点。 这里的标签也是: 将中心Yalignment:顶部button,等于:20 顶部空间到:底部button,等于:20 现在,无论3.5或4英寸的显示器,屏幕上都有两个button。 一个缺点是在3.5英寸的显示屏上与导航控制器和工具栏的距离非常小。 在这里,我可以使button更小。 任何其他选项? 最初的想法是总是将空间设置为顶部元素,但是在4英寸的屏幕上,底部上的空间比。

我有一个UILabel自动布局定位在屏幕上,但是当我隐藏导航栏,它会导致标签“抽搐”第二个

项目: http : //cl.ly/1T2K0V3w1P21 通过这个项目可以看出,这只是一个简单的下载,仅仅是视图控制器。 基本上,我的UILabel与自动布局保持完美的地方,但是当我隐藏导航栏(你可以通过在任何地方点击屏幕在项目中做到这一点),导致它抽搐。 不pipe导航栏上发生了什么,我如何使它保持在完全相同的位置? 它似乎是animation(我想)导致AutoLayout感到困惑。 以下是标签上的限制条件: 任何人都可以提供一些build议,我做错了什么?

NSLayoutConstraint并确定哪个子视图更宽

我在子类容器UIView创build一个UISwitch和一个UILabel : UISwitch *toggleSwitch = [UISwitch new]; toggleSwitch.translatesAutoresizingMaskIntoConstraints = FALSE; [toggleSwitch addTarget:self action:@selector(switchToggleDetected:) forControlEvents:UIControlEventValueChanged]; self.toggleSwitch = toggleSwitch; [self addSubview:toggleSwitch]; UILabel *label = [UILabel new]; label.translatesAutoresizingMaskIntoConstraints = FALSE; label.textAlignment = NSTextAlignmentCenter; label.textColor = [UIColor whiteColor]; label.font = [UIFont fontWithName:HELVETICA_FONT_STYLE_BOLD size:10.0]; label.text = [self.text uppercaseString]; self.label = label; [self addSubview:label]; [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[toggleSwitch]-5-[label]" options:NSLayoutFormatAlignAllCenterX metrics:nil views:NSDictionaryOfVariableBindings(toggleSwitch, label)]]; […]

UIScrollView和约束问题

我创build一个UIScrollView: // datasetSubView.m UIScrollView *scrollView = [UIScrollView new]; scrollView.translatesAutoresizingMaskIntoConstraints = FALSE; scrollView.userInteractionEnabled = TRUE; scrollView.scrollEnabled = TRUE; scrollView.backgroundColor = [UIColor whiteColor]; scrollView.alpha = 0; self.filterListView = scrollView; 然后在我的UIViewController,我添加滚动视图,并给它一个大小: [self.view addSubview:self.datasetSubBar.filterListView]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[filterListView]|" options:0 metrics:nil views:@{@"filterListView": self.datasetSubBar.filterListView}]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[filterListView][filtersSubBar]" options:0 metrics:nil views:@{@"filterListView": self.datasetSubBar.filterListView, @"filtersSubBar" : self.datasetSubBar.filtersSubBar}]]; [self.view layoutIfNeeded]; //gives the filterListView its frame 然后我创build一个自定义UIView放置在滚动视图: […]

UISplitViewController – 设置始终可见的主控制器

我已经研究了分割视图的例子( 像这样 ),它的效果很好。 我只需要改变一下行为。 当用户使用纵向的iPad时,我希望主控和详细控制器都可见。 它应该像FB Messenger或Skype一样工作。 两个控制器并排,无法隐藏主控制器。 这怎么可能呢? 感谢帮助 奖金的问题:是否有可能以某种方式设置iPad肖像像iPhone肖像一样的行为? 如果我会改变主意,我希望有全屏的细节,并点击左侧导航栏button后,我会有全屏的主视图,没有细节可见。 我可能或分裂的观点决定,并没有太多我能做些什么吗?

为UIScrollView设置约束

需要一些帮助来设置约束到UIScrollView。 我试图按照这里的指示: https : //developer.apple.com/library/ios/technotes/tn2154/_index.html (混合的方法)。 为UIScrollView设置4个边界约束。 然后设置4个双面约束到buttonContainer。 结果是: 但是,xcode是给出这个错误消息: 如果我尝试Xcode的build议,滚动视图不会滚动,或根本不显示。 任何想法这里有什么问题?

如何在自动布局的横向模式下设置水平文本字段?

在我的应用程序,我想设置文本字段宽度根据屏幕大小在横向模式,使用自动layout.it的工作肖像完美的土地景观模式不工作。 这是我的屏幕自动布局, 在这样的风景模式下, 这是我的限制屏幕 这是我的视图控制器