Relativelayout

Задаем размеры View на основе соотношения сторон

ConstraintLayout позволяет рассчитывать высоту или ширину view на основе заданного соотношения сторон. То есть, например, при соотношении сторон , если высота будет , то ширина рассчитается, как .

За это отвечает атрибут . Задать соотношение сторон можно в двух форматах: текстовом или числовом . При этом перед значением можно указать символ стороны, которая находится в числителе соотношения. Например, будет означать, что 16 — это значение, соотвествующее высоте (H), а 9 — ширине (W).

Значение в учитывается при расчете размеров view, только если хотя бы одна из сторон выставлена в match_constraint_wrap или match_constraint_spread.

Пример:

About

Contributing

Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.

Running Tests

Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:

$ npm install && npm test

Building docs

(This project’s readme.md is generated by verb, please don’t edit the readme directly. Any changes to the readme must be made in the .verb.md readme template.)

To generate the readme, run the following command:

$ npm install -g verbose/verb#dev verb-generate-readme && verb

Brian Woodward

  • GitHub Profile

License

Copyright 2019, Brian Woodward.
Released under the MIT License.

This file was generated by verb-generate-readme, v0.8.0, on April 11, 2019.

Выставляем относительное расположение View внутри ConstraintLayout

Если у view привязать два горизонтальных constraints, то ей можно выставить горизонтальное относительное расположение. То же применимо и для вертикальных constraints.

За горизонтальное расположение отвечает атрибут , за вертикальное — . Указывается относительное расположение значением от 0 до 1.

По сути, это более гибкая замена атрибута . Например, для горизонтального расположения будет означать расположение крайне слева, 0.5 — по центру, 1 — крайне справа. По умолчанию — 0.5.

Теперь, например, выставим значение 0.3. Это будет означать, что 30% не заполненного view места будет слева от view, а 70% — справа. Если же размер view больше размера расстояния между constraints, то 30% выходящего за constraints размера будет слева от ограничений, а 70% — справа.

Небольшое важное замечание: если в манифесте выставлена поддержка RTL языков, то вместо «слева» будет располагать элементы «от начала», а вместо «справа» — «от конца». То есть тем, кто поддерживает RTL языки стоит учитывать, что явно выставить расположение «слева» и «справа» не выйдет

По крайней мере, я такой возможности не нашел.

Пример:

Release Notes

  • v0.4.5: updated build instructions, added null check for bitmap in
  • v0.4.4: updated build instructions, removed some unnecessary casts
  • v0.4.3: reorganized code into Android Studio standard structured, added JavaDocs
  • v0.4.2: updated for Android Studio 1.0 and new AAR publishing system
  • v0.4.1: updated Gradle, fixed manifest for merging, added prefix to JAR
  • v0.4.0: switched to for more reliable updating; added
  • v0.3.0: migrated to support Gradle and publish an AAR artifact
  • v0.2.2: improved efficiency and resiliency to source/mirror issues
  • v0.2.1: fixed to handle zero height/width better
  • v0.2.0: added and used for
  • v0.1.0: initial release

MIT License

Copyright (c) 2016 Nikolay Yevstakhov

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
«Software»), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED «AS IS», WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Обзор XML макетов (Android Layouts)

В Android основным строительным блоком пользовательского интерфейса является объект , который по умолчанию он занимает прямоугольную область на экране. Этот объект является экземпляром одноименного класса   базовым классом для всех компонентов пользовательского интерфейса, например: TextView, Button, EditText и другие.

Также есть класс , который является подклассом . Один или несколько могут быть сгруппированы в . Этот класс обеспечивает компоновку, вид и последовательность . Примерами являются , , о которых мы сегодня и поговорим.

Основные макеты в Android:

  •  — это , который определяет положение дочерних  относительно друг друга.
  •  — это , который определяет расположение всех дочерних элементов: по вертикали или по горизонтали.
  •  позволяет указать точное положение дочерних .
  •  рассматривает дочерние элементы в виде строк и столбцов.
  •  — разновидность , в котором элементы представлены в двумерной сетке  с прокруткой. Элементы в попадают из назначенного экземпляра .
  •  заполняет собой экран для отображения единственного .
  •  — набор , который можно скроллить (прокручивать).
  •  — разновидность , позволяющая просматривать элементы пользовательского интерфейса даже если они не видны на первом экране. Это происходит с помощью скроллинга (пользователь прокручивает экран для полной видимости содержимого). может содержать только один вид дочерний и же макет .

Android Layouts: атрибуты XML макета/компоновки

  •  — это идентификатор, который однозначно идентифицирует элемент
  •  — ширина макета
  •  — высота макета
  •  — дополнительное пространство за пределами элемента .
  •  определяет дополнительное пространство внутри элемента .
  •  определяет расположение дочернего .
  •  определяет дополнительного пространства для .
  •  определяет координаты макета по оси Ox
  •  определяет координаты макета по оси Oy

Атрибут  указывает, что должно занять ровно столько места по ширине, сколько занимает его содержимое.

Атрибут указывает, что должно занять ровно столько места по ширине, сколько занимает его родительский элемент.

В этом уроке мы рассмотрим два наиболее популярных в разработке под Android макета:

Создаем цепи (chains)

При привязке сторон есть одно интересное правило — если привязать две стороны двух элементов друг к другу , то элементы будут выделены в цепь и к ним будут применяться особые правила расположения.

Цепью считается набор элементов, стороны которых привязаны друг к другу. Цепи определяются автоматически на основе привязок элементов внутри . Цепь располагается на основе привязок ее крайних элементов, а элементы внутри цепи располагаются по правилам определенного стиля цепи. Стиль цепи задается атрибутом , где X — для горизонтальных цепей или для вертикальных.

Пример цепи: правило свяжет элементы и в цепь, а привяжет всю цепь элементов к внешним сторонам .

Стиль цепи и его параметры берутся из атрибутов головного элемента цепи — самого левого, начального или самого верхнего.

Стиль spread

Элементы цепи распределяются равномерно, то есть отступы между элементами и от элементов до границ цепи будут одинаковые. Используется по умолчанию;

Элементы цепи распределяются так же, как и при стиле , но отступы от границ цепи всегда равны нулю;

Стиль packed

Элементы располагаются группой друг за другом. Такой стиль позволяет устанавливать относительную позицию группы элементов в доступном цепи пространстве через атрибут . Bias атрибут нужно указывать у головного элемента цепи;

Стиль weighted

Элементы располагаются в соответствии с их весом по аналогии с тем, как работает LinearLayout. Чтобы такой стиль заработал, одна из view цепи должна иметь размер match_constraint_spread. Для указания веса элемента используются атрибуты и .

Usage

Sample Code (Swift)

PureLayout dramatically simplifies writing Auto Layout code. Let’s take a quick look at some examples, using PureLayout from Swift.

Initialize the view using PureLayout initializer:

let view1 = UIView(forAutoLayout: ())

If you need to use a different initializer (e.g. in subclass), you can also use :

Here’s a constraint between two views created (and automatically activated) using PureLayout:

view1.autoPinEdge(.top, toEdge: .bottom, ofView: view2)

Without PureLayout, here’s the equivalent code you’d have to write using Apple’s Foundation API directly:

NSLayoutConstraint(item: view1, attribute: .top, relatedBy: .equal, toItem: view2, attribute: .bottom, multiplier: 1.0, constant: 0.0).active = true

Many APIs of PureLayout create multiple constraints for you under the hood, letting you write highly readable layout code:

// 2 constraints created & activated in one line!
logoImageView.autoCenterInSuperview()

// 4 constraints created & activated in one line!
textContentView.autoPinEdgesToSuperviewEdges(with insets UIEdgeInsets(top: 20.0, left: 5.0, bottom: 10.0, right: 5.0))

PureLayout always returns the constraints it creates so you have full control:

let constraint = skinnyView.autoMatchDimension(.height, toDimension: .width, ofView: tallView)

PureLayout supports safearea with iOS 11.0+:

view2.autoPinEdge(toSuperviewSafeArea: .top)

PureLayout supports all Auto Layout features including inequalities, priorities, layout margins, identifiers, and much more. It’s a comprehensive, developer-friendly way to use Auto Layout.

Check out the example apps below for many more demos of PureLayout in use.

Example Apps

Open the project included in the repository (requires Xcode 6 or higher). It contains iOS ( scheme) and OS X ( scheme) demos of the library being used in various scenarios. The demos in the iOS example app make a great introductory tutorial to PureLayout — run each demo, review the code used to implement it, then practice by making some changes of your own to the demo code.

Each demo in the iOS example app has a Swift and Objective-C version. To compile & run the Swift demos, you must use Xcode 7.0 or higher (Swift 2.0) and choose the scheme. When you run the example app, you can easily switch between using the Swift and Objective-C versions of the demos. To see the constraints in action while running the iOS demos, try using different device simulators, rotating the device to different orientations, as well as toggling the taller in-call status bar in the iOS Simulator.

On OS X, while running the app, press any key to cycle through the demos. You can resize the window to see the constraints in action.

Указываем отступы с учетом скрытых элементов

Отступы указываются стандартными атрибутами , где X — сторона отступа (). Эти отступы применяются к линиям привязки элемента, а не к сторонам элемента. Это значит, что линия привязки будет с отступом от стороны, к которой она привязана.

Отдельные правила были введены для скрытых элементов, то есть элементов, у которых выставлено в значение . Когда элемент скрыт, обычные отступы от его сторон игнорируются, но используются специальные . Его размеры при этом при расчетах считаются равными нулю. представлены атрибутами: , где X — сторона отступа.

Другими словами, допустим, у элемента выставлен отступ слева от элемента равный , а gone-отступ слева выставлен . Если элемент скрыт (), то отступ элемента слева будет , если элемент — или , то отступ элемента слева будет .

Пример:

Примеры

Рассмотрим возможности LinearLayout на примерах.

Создадим 7 текстовых меток и присвоим им цвета радуги. Расположим их друг за другом. Получим следующий результат

Отцентрируем текст в TextView при помощи свойства Gravity, установив значение Center. Аналогично поступим и с LinearLayout, чтобы выровнять по центру текстовые метки.

Цветные полоски получились слишком узкими. Расширим их за счет увеличения размера шрифта (TextSize) у текстовых меток.

Стало чуть лучше, но все равно пропадает много свободного пространства. Совсем не хочется видеть чёрный цвет сверху и снизу. Здесь нам придёт на помощь свойство Layout weight. Так как число 7 не совсем удобное для деления, то поступим следующим образом. Пяти элементам присвоим вес 0.14, а двум — 0.15, что в сумме даст 1.0. Теперь элементы равномерно заполнят весь экран.

Если мы хотим сделать плавное увеличение высоты полоски, то вес нужно распределить таким образом: 0.08, 0.10, 0.12, 0.14, 0.16, 0.18, 0.22.

Чем хорош этот способ? Мы не привязываемся к точным размерам, а позволяем системе самой расчитывать равномерное распределение элементов по экрану. Если в Eclipse вы выберите режим Landscape, то экран будет выводиться в альбомном режиме и при этом элементы по-прежнему будет равномерно распределены.

Step 1: Add a TextView

  1. Open the file, if it’s not already open.
  2. Switch to the Text tab and inspect the code. The code has a as its root view group. (View groups are views that contain other views.)The has the required attributes , , and , which is by default.
  3. Switch to the Design tab to open the Layout Editor.
  1. Drag a text view from the Palette pane onto the design editor.
  2. Notice the Component Tree pane. The new text view is placed as a child element of the parent view group, which is the .
  3. Open the Attributes pane, if it’s not open already. (To open the pane, double-click the newly added in the design editor.)
  4. Set the following attributes in the Attributes pane:

Attribute

Value

ID

text

Set it to your name. (One of the text fields shows a wrench icon to indicate that it’s for the namespace. The one without the wrench is for the namespace—this is the text field you want.)

textAppearance > textSize

textAppearance > textColor

textAppearance > textAlignment

Center

Overview

View Layouts are a type of View class whose primary purpose is to organize and position other view controls. These layout classes (LinearLayout, RelativeLayout, etc.) are used to display child controls, such as text controls or buttons on the screen.

Android activities (screens) use layouts as a container for view controls, and layouts can actually contain other nested layouts as well. Nearly all Android activities have layout containers similar to the way that most HTML documents use «divs» to contain other content.

There are a few very commonly used layouts and then many more specialized layouts that are used in only very particular cases. The bread and butter layouts are LinearLayout, RelativeLayout, and FrameLayout. Most of what can be done in LinearLayout and RelativeLayout can now be done with a new layout system called ConstraintLayout.

It’s important to note the class hierarchy of these View Layouts. Each of them subclass , which itself subclasses . That means it is perfectly legal to pass a layout such as as an argument for something that takes as a parameter. also contains the nested static class which is used for creating or editing layouts in code. Keep in mind that each subclass of , such as , has its own nested static class that’s a subclass of . When creating View Layouts in code, beginners will often confuse the many different available classes and run into hard to catch problems.

References

  • https://androidexample365.com/tag/layout/
  • http://developer.android.com/guide/topics/ui/declaring-layout.html
  • http://developer.android.com/guide/topics/ui/layout/linear.html
  • http://developer.android.com/guide/topics/ui/layout/relative.html
  • http://www.learn-android.com/2010/01/05/android-layout-tutorial/
  • http://mobile.tutsplus.com/tutorials/android/android-layout/
  • http://www.androidhive.info/2011/07/android-layouts-linear-layout-relative-layout-and-table-layout/
  • http://logc.at/2011/10/18/when-to-use-linearlayout-vs-relativelayout/
  • http://developer.android.com/reference/android/widget/FrameLayout.html
  • https://plus.google.com/+AndroidDevelopers/posts/C8oaLunpEEj

Layouts Filter

<filter>
    <filter-name>LayoutsFilter</filter-name>
    <filter-class>org.baswell.layouts.LayoutsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>LayoutsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

The must be in the processing chain for all requests you want rendered with a layout. It should be placed before any other filters that might
generate content for the HTTP response.

You can use the filter parameters ONLY and EXCEPT for finer grained control (than url-pattern) over which HTTP requests the is engaged for.

<init-param>
  <param-name>ONLY</param-name>
  <param-value>/home/.*,/users/.*</param-value>
</init-param>

The ONLY parameter must be a list (comma delimited) of valid Java regular expression. If specified, only request URIs that match one of these
patterns will be candidates for layouts. The URI from the HTTP request matched against these patterns will not include the context path of your application.

The other supported parameter is EXCEPT:

<init-param>
  <param-name>EXCEPT</param-name>
  <param-value>.*\.html$,.*\.htm$</param-value>
</init-param>

The EXCEPT parameter must be a list (comma delimited) of valid Java regular expression. If specified, only request URIs that don’t match any of these patterns
will be candidates for layouts. The URI from the HTTP request matched against these patterns will not include the context path of your application.

If both ONLY and EXCEPT are specified then a request will only be a candidate for a layout if a match is made one of the ONLY patterns and no match is made on any of the EXCEPT patterns.

Usage: AspectLockedFrameLayout

inherits from , and so you start by
setting it up much like you would any other . In fact, if you do
nothing else, it behaves the same as a regular .

However, if you call (supplying a of the aspect
ratio you want) or (supplying a whose aspect
ratio should be matched), then will reduce its height
or width to maintain the requested aspect ratio. This affects the children of
the as well, of course.

Since the effectively overrides and reduces its size,
you can use to position the shrunken
within its parent:

<FrameLayout
	android:layout_width="match_parent"
	android:layout_height="match_parent">

	<com.commonsware.cwac.layouts.AspectLockedFrameLayout
		android:id="@+id/source"
		android:layout_width="match_parent"
		android:layout_height="match_parent"
		android:layout_gravity="center">

		<!-- children go here -->
	</com.commonsware.cwac.layouts.AspectLockedFrameLayout>
</FrameLayout>

Note that the resizing only takes place when the
is measured. If you change the aspect ratio, call on
the (or any parent container) to get it to resize.

NOTE: also offers aspect ratio control, so you might
consider using it if it better fits your needs.

RepeatableWrapLayout

This Layout is WrapLayout corresponding to DataTemplate and DataTemplateSelector.

How to write with Xaml

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
		xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
		xmlns:l="clr-namespace:AiForms.Layouts;assembly=AiForms.Layouts"
		x:Class="Sample.Views.MainPage">
	<StackLayout>
		<ScrollView HorizontalOptions="FillAndExpand">
			<lRepeatableWrapLayout
				ItemTapCommand="{Binding TapCommand}"
				ItemsSource="{Binding BoxList}"
				Spacing="3" UniformColumns="{Binding UniformColumns}"
				IsSquare="{Binding IsSquare}" >
				<lRepeatableWrapLayout.ItemTemplate>
					<DataTemplate>
						<StackLayout BackgroundColor="{Binding Color}" >
							<Label
								VerticalTextAlignment="Center" HorizontalTextAlignment="Center"
								Text="{Binding Name}"  />
						</StackLayout>
					</DataTemplate>
				</lRepeatableWrapLayout.ItemTemplate>
			</lRepeatableWrapLayout>
		</ScrollView>
	</StackLayout>
</ContentPage>

Notes

  • Maybe. At least I personally haven’t found a second one.
  • Things like Ambiguous Layout on Auto Layout, or just forgot to set an edge for a subview while overriding .
  • It’s not difficult to memorize the syntax, but you have to write global functions rather than methods, which makes it a little bit hard for auto-completion comparing with methods.
  • Sometimes the method name is too short to understand what it really does.
  • It’s not very difficult to understand, but still takes a while to read the syntax.
  • SnapKit does have chained methods to help you making Auto Layout constraints, but you may still need to write more than one statement to make all required constraints.
  • LayoutKit and Cartography don’t have a namespaced extension mechanism, but instead LayoutKit uses local types, and Cartography uses function to avoid possible name-confilictions.
  • LayoutKit theoretically doesn’t make any ambiguous layouts within its syntax, but it still produces some implicitly sizing process.

Step 1: Add padding

To put space between your name and the top edge of the text view, add top padding.

  1. Open file in the Design tab.
  2. In the Component Tree or in the design editor, click the text view to open its Attributes pane.
  3. At the top of the Attributes pane, click the double-arrow icon to see all the available attributes.
  4. Search for Padding, expand it, and click the three dots … next to the top attribute. The Resources dialog appears.
  5. In the Resources dialog, select Add new resource > New dimen Value.
  6. In the New Dimension Value Resource dialog, create a new resource called with a value of .The dp abbreviation stands for density-independent. If you want a UI element to look the same size on screens with different densities, use dp as your unit of measurement. When specifying text size, however, always use sp (scalable pixels).
  7. Click OK.

Step 3: Create a dimension resource

You just added a resource using the resource editor. You can also extract resources in the XML code editor to create new resources:

  1. In the file, switch to the Text tab.
  2. On the line, click on the number () and type ( on a Mac). Select Extract dimension resource from the popup menu.
  3. In the Extract Resource dialog, enter in the Resource name field. Click OK.
  4. Open the file to see the following generated code:
  1. Open file, and look for the following code at the end of the function:

The function connects the layout file with the . The specified layout resource file is :

  • is a reference to the resource. It is an auto-generated class with definitions for all the resources in your app.
  • indicates that the resource is a layout named .

LinearLayout

In a linear layout, like the name suggests, all the elements are displayed in a single direction either horizontally or vertically and this behavior is specified in which is an attribute of the node .

Building via ConstraintLayout

You can create linear layouts now with ConstraintLayout by constraining the sides of each element with each other. The quick way of creating these layouts is to select all the views together and right click to center horizontally or vertically. Notice how the blueprint shows the views now show a chain icon between the views:

You can also distribute the views with different styles, including spread, spread inside, or packed. Spread causes the views to be distributed evenly, spread inside obeys the constraints on the first and last element and distributes the rest of the space evenly, or packed causes the views to be squashed and adjusted by the chain’s head view bias.

Click this link to see the basic walkthrough.

Building via the old way

All children of a LinearLayout are displayed sequentially based on the order they are defined within the layout. A LinearLayout respects margins between children and the gravity (right, center, or left alignment) of each child.

Common view attributes you might see used in a LinearLayout:

  • — Controls the alignment of the view content (akin to text-align in CSS)
  • — Controls the alignment of the view within it’s parent container (akin to float in CSS)
  • — Specifies how much of the to be allocated to a view.

Example of LinearLayout snippet:

Distribute Widths with Layout Weight

If you want to setup a part of your layout, such that, for instance, 3 buttons appear in a row, occupying equal space (or if, for instance, you want to give 4/5 space to a map and 1/5 to another component below it), can be used to do the trick by leveraging . This works by setting the to a total value and then setting the value for each subview to determine width distribution.

Using the above XML, will have 2/5 of total container width and will have 3/5 of parent width because we set the total to and the buttons property to and respectively.

Use caution in utilizing multiple nested s and/or from a performance standpoint!

Comparison with other layout frameworks

Items NotAutoLayout PinLayout LayoutKit SnapKit PureLayout Cartography
Written in Swift Swift Swift (and a little ObjC) Swift ObjC (and a little Swift) Swift
Based on Pure code Pure code Pure code Auto Layout Auto Layout Auto Layout
Platforms iOS iOS / macOS / tvOS iOS / macOS / tvOS iOS / macOS / tvOS iOS / macOS / tvOS iOS / macOS
Dependency Manager CocoaPods / Carthage CocoaPods / Carthage CocoaPods / Carthage CocoaPods / Carthage CocoaPods / Carthage CocoaPods / Carthage
Performance × × ×
Easy to write ×
Easy to read
Ex-Short syntax × × × × ×
Chained methods × × ×
Targeted extensions × × ×
Behaviour on human-errors Build-time Error Run-time Warning Build-time Error Run-time Warning Run-time Warning Run-Time Warning

Step 2: Create a string resource

In the Component Tree, next to the you will notice a warning icon . To see the warning text, click the icon or point to it, as shown in the screenshot below.

To resolve the warning, create a string resource:

  1. In the Attributes pane, click the three dots next to the text attribute that you set to your name. The resource editor opens.
  2. In the Resources dialog, select Add new resource > New string Value.
  3. In the New String Value Resource dialog, set the Resource name field to . Set the Resource value field to your own name. Click OK. Notice that the warning is gone.
  4. Open the file and look for the newly created string resource called .

Программный способ создания разметки

Для подключения созданной разметки используется код в методе onCreate():

// activity_main.xml - имя вашей основной разметки
setContentView(R.layout.activity_main);

Естественно, вы можете придумать и свое имя для файла, а также в приложениях с несколькими экранами у вас будет несколько файлов разметки: game.xml, activity_settings.xml, fragment_about.xml и т.д.

В большинстве случаев вы будете использовать XML-способ задания разметки и подключать его способом, указанным выше. Но, иногда бывают ситуации, когда вам понадобится программный способ (или придется разбираться с чужим кодом). Вам доступны для работы классы android.widget.LinearLayout, LinearLayout.LayoutParams, а также Android.view.ViewGroup.LayoutParams, ViewGroup.MarginLayoutParams. Вместо стандартного подключения ресурса разметки через метод setContentView(), вы строите содержимое разметки в Java, а затем уже в самом конце передаёте методу setContentView() родительский объект макета:

Число макетов постоянно меняется. Например, недавно появились новый виды CoordinatorLayout и ConstraintLayout. Кроме стандартных элементов разметки существуют и сторонние разработки.

Setup

Compatibility

The current release of PureLayout supports all versions of iOS and OS X since the introduction of Auto Layout on each platform, in both Swift and Objective-C, with a single codebase!

  • Xcode
    • Language Support: Swift (any version), Objective-C
    • Fully Compatible With: Xcode 7.0
    • Minimum Supported Version: Xcode 5.0
  • iOS
    • Fully Compatible With: iOS 9.0
    • Minimum Deployment Target: iOS 6.0
  • OS X
    • Fully Compatible With: OS X 10.11
    • Minimum Deployment Target: OS X 10.7
pod 'PureLayout'
  1. Run from Terminal, then open your app’s file to launch Xcode.
  2. Import the umbrella header.
  • With in your Podfile
    • Swift:
    • Objective-C: (or with Modules enabled: )
  • Without in your Podfile
    • Swift: Add to your bridging header.
    • Objective-C:

That’s it — now go write some beautiful Auto Layout code!

Using Carthage

  1. Add the project to your .
  1. Run , then follow the to add the framework into your project.
  2. Import the PureLayout framework/module.
  • Swift:
  • Objective-C: (or with Modules enabled: )

That’s it — now go write some beautiful Auto Layout code!

Manually from GitHub

  1. Download the source files in the PureLayout subdirectory.
  2. Add the source files to your Xcode project.
  3. Import the header.
  • Swift: Add to your bridging header.
  • Objective-C:

That’s it — now go write some beautiful Auto Layout code!

App Extensions

To use PureLayout in an App Extension, you need to do a bit of extra configuration to prevent usage of unavailable APIs. Click here for more info.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector