Журнал всех версий MyLayout будет здесь отслеживаться.
shrinkType
линейной контейнерной вьюхи MyLinearLayout
добавлена поддержка нового перечисления MySubviewsShrink_Space
, что позволяет автоматически сжимать расстояние между дочерними вьюшками при размерах последних превышении размеров контейнера. Пример можно найти в последнем тестовом примере (DEMO: AllTest7ViewController).horzMargin
и vertMargin
, позволяющие одновременно установить горизонтальные и вертикальные отступы соответственно.MyFlowLayout
, когда количество элементов в последней строке равно количеству элементов в каждой строке, а расстояния между ними не могут быть увеличены.#### ИзмененоИзвините за все изменения названий. Сейчас все старые свойства и методы помечены как устаревшие, но всё ещё работают и выдают предупреждение.Для обеспечения совместимости с предыдущими версиями можно определить макрос перед включением PCH файла, либо перед объявлением заголовочного файла MyLayout.h, либо в настройках проекта:
#define MY_USEOLDMETHODNOWARNING 1
Если вы хотите заменить все старые методы и свойства (что рекомендуется сделать), выполните следующие шаги:
MyMarginGravity_
и замените на MyGravity_
. Выберите режим "Containing", найдите и замените во всех местах кроме библиотеки MyLayout..myLeftMargin
, .myRightMargin
, .myTopMargin
, .myBottomMargin
, .myCenterXOffset
, .myCenterYOffset
, .myCenterOffset
соответственно на .myLeft
, .myRight
, .myTop
, .myBottom
, .myCenterX
, .myCenterY
, .myCenter
. Выберите режим "Matching"..widthDime
на .widthSize
, .heightDime
на .heightSize
. Выберите режим "Matching"..subviewMargin
на .subviewSpace
, .subviewVertMargin
на .subviewVSpace
, .subviewHorzMargin
на .subviewHSpace
. Выберите режим "Matching".MyBorderLineDraw
на MyBorderline
. Выберите режим "Matching" и не меняйте в MyBaseLayout.h..leftBorderLine
на .leftBorderline
, .rightBorderLine
на .rightBorderline
, .topBorderLine
на .topBorderline
, .bottomBorderLine
на .bottomBorderline
, .IntelligentBorderLine
на .intelligentBorderline
, .notUseIntelligentBorderLine
на .notUseIntelligentBorderline
. Выберите режим "Matching".averageSubviews:
на equalizeSubviews:
, а averageMargin:
на equalizeSubviewsSpace:
. Обратите внимание, чтобы не менять части MyLinearLayout.h и MyLinearLayout.m.- (CGRect)estimatedRectForSubview:(UIView *)subview inLayoutSize:(CGSize)size
, который используется для оценки frame значения подчиненного view до его добавления в layout view. Этот метод обычно используется для реализации анимации перемещения подчиненных views между layout views. Пример использования см. в демо (DEMO: AllTest4ViewController).self.view
) в качестве представления контроллера, что может вызывать конфликты ограничений и проблемы с прокруткой при добавлении представления контроллера в прокручиваемое представление.shrinkType
в линейном макете MyLinearLayout
было изменено с MySubviewsShrink_Average
на MySubviewsShrink_None
, то есть теперь по умолчанию сжатие отключено.useFrame
равна YES приводила к невозможности управления размерами подчиненных представлений.IBInspectable
для лучшей совместимости с XIB и SB программированием.shrinkType
линейного макета MyLinearLayout
добавлено новое значение MySubviewsShrink_Auto
. Это значение предназначено для решения проблем с горизонтальным линейным макетом, где ширина двух подчинённых представлений неопределена, но требуется, чтобы они не накладывались друг на друга. Подробнее см. пример (DEMO: AllTest7ViewController, пример №4).zeroPadding
, которое указывает, будет ли padding учитываться при вычислении размеров макета представления, если нет подчинённых представлений. По умолчанию установлено YES, то есть padding всегда учитывается. При установке NO padding не учитывается при отсутствии подчинённых представлений. Подробнее см. пример (DEMO: LLTest4ViewController).initWithFrame
для линейных, поточных и плавающих макетов, позволяющие явно задавать рамки этих макетов.wrapContentHeight
и wrapContentWidth
для обычных представлений. Эти свойства были перемещены из макетов представлений в расширения для всех представлений. Теперь высота и ширина обычного представления могут зависеть от его внутреннего макета представления. Подробнее см. пример (DEMO: LLTest4ViewController).marginGravity
удалена.Конкретные изменения см. в методах замены в MyFrameLayout.h.flexedHeight
для адаптивной высоты виджета. Высота теперь устанавливается через расширенное свойство wrapContentHeight
.makeLayout
.MyFlowLayout
реализовано поддержание пейджированного скроллинга с помощью нового свойства pagedCount
, которое поддерживает только ограничивающиеся по количеству потоковые макеты. Соединение pagedCount
со свойствами wrapContentHeight
и wrapContentWidth
позволяет создать различные эффекты пейджированного скроллинга в разных направлениях (подробнее см. DEMO: FLLTest5ViewController).MyLinearLayout
полностью поддерживаются все возможности установки высоты всех дочерних элементов равной ширине, а также добавлена возможность установки ширины дочернего элемента равной его высоте при горизонтальном расположении.MyFlowLayout
теперь можно задавать относительные размеры для ширины и высоты дочерних элементов, используя зависимости от других виджетов, как братских, так и родительских, а также от любого другого виджета.MyLayoutPos
и MyLayoutSize
добавлено новое свойство active
, которое указывает, действует ли примененное ограничение.wrapContentWidth
или wrapContentHeight
.contentSize
в UIScrollView
при добавлении макетного вьюхауда. Теперь значения отступов MyLayoutPos
учитываются при вычислении contentSize
. Например, если высота макета составляет 100, а значение вертикального отступа myTopMargin
равно 10, то после добавления макетного вьюхауда в UIScrollView
высота contentSize
будет равна 110.lBound
, uBound
в классе позиционирования layouts MyLayoutPos
. Эти методы используются для установки минимальной и максимальной зависимости положения view. Методы lBound
, uBound
действуют только при настройке child views относительно Relative Layout.lBound
, uBound
: RLTest5ViewController.#### УстраненоwrapContentWidth
и wrapContentHeight
равным YES
в классе MyPathLayout
.MyLinearLayout
, связанный с неправильным распределением пространства между view при использовании методов разделения пространства и view.MyRelativeLayout
, когда установлен padding сверху (topPadding
) и значение topPos
для child view задается как число, то padding сверху игнорируется (BUG#29).flexedHeight
в классе MyRelativeLayout
.#### ИзмененоMyMarginGravity_Horz_Between
, MyMarginGravity_Vert_Between
, используемые для описания операций растяжения внутри layout.gravity
в классе MyLinearLayout
(подробнее см. LLTest3ViewController).gravity
в классе MyFlowLayout
(подробнее см. FLLTest1ViewController).MyFlowLayout
: - (void)setSubviewsSize:(CGFloat)subviewSize minSpace:(CGFloat)minSpace maxSpace:(CGFloat)maxSpace
, который позволяет динамически регулировать промежутки в контент-ограниченном Flow Layout, обеспечивая идеальное соответствие экранам.- (void)setSubviewFloatMargin:(CGFloat)subviewSize minMargin:(CGFloat)minMargin
в классе MyFloatLayout
будет считаться устаревшим, замените его новым методом - (void)setSubviewsSize:(CGFloat)subviewSize minSpace:(CGFloat)minSpace maxSpace:(CGFloat)maxSpace
.averageArrange
в классе MyFlowLayout
будет считаться устаревшим, замените его настройками атрибута gravity
.po viewobj.myFrame.sizeClass
или expr -o -- viewobj.myFrame.sizeClass
.transform
) к вложенному макетному представлению, которое было добавлено в номакетный родительский элемент. В новой версии макет может корректно использоваться вместе с атрибутом transform
. Это связано с тем, что в старых версиях конечное расположение макета изменялось через атрибут frame, тогда как в новых версиях все изменения атрибута frame были заменены на два атрибута center и bounds.shrinkType
. Это свойство используется для управления методами сжатия размеров фиксированных видов, когда они превышают размер макета, при наличии относительных расстояний или процентных размеров в дочерних видах. Подробнее см. пример AllTest7ViewController.rotationToDeviceOrientationBlock
. Этот блок предоставляет возможность пользователю выполнять обработку макета при первом завершении макета или при повороте экрана. Блок вызывается после первого завершения макета и каждый раз при завершении макета после поворота экрана, поэтому следует обратить внимание на проблему циклических ссылок. Подробнее см. пример LLTest6ViewController.uBound
и lBound
, используемые для установки максимальных и минимальных значений, теперь допускают значения равные самому себе, что позволяет гарантировать, что размер самого вида не будет сжат. Подробнее см. пример AllTest7ViewController.po viewObject.absPos.sizeClass
или expr -o -- view.absPos.sizeClass
.topPos
, rightPos
, bottomPos
находятся между 0 и 1, то это указывает на использование относительных отступов.wrapContentWidth
или wrapContentHeight
, когда в дочерних элементах задана ширина или высота с весом или относительным отступом (подробнее см. приложение AllTest7ViewController).uBound
и lBound
класса MyLayoutDime, который не вычитал значение отступа (padding
) при установке максимального и минимального размера.MAS_SHORTHAND_GLOBALS
в Masonry, что делает недоступными методы offset
и equalTo
. Решение заключается в определении макроса MY_USEPREFIXMETHOD
перед использованием MyLayout.h. Это добавляет префикс my
ко всем методам классов MyLayoutPos и MyLayoutDime. Например, A.leftPos.equalTo(@10)
станет A.leftPos.myEqualTo(@10)
.Оптимизация кода и исправление ошибки, связанной с возможностью указывать любой другой виджет в методах uBound
и lBound
.#### Обновлено
Оптимизация вызова методов beginLayoutBlock
и endLayoutBlock
, а также решение проблемы циклического использования этих блоков. Также проведена оптимизация метода viewLayoutCompleteBlock
для предотвращения циклического использования.
hidden
) для элемента разметки, особенно когда этот элемент является дочерним элементом относительной разметки.noBoundaryLimit
, которое позволяет реализовать сценарии однонаправленного плавающего поведения без ограничений границ (подробнее см. FOLTest6ViewController).estimateLayoutRect
вычисление размеров вложенных компоновок, что увеличило скорость оценки динамического изменения высоты.layoutSubviews
.calculateSizeForView
, что повысило производительность при работе с большими данными.updateConstraints
.layoutIfNeeded
, что ускорило процесс перерасчета размеров элементов.setNeedsDisplay
.layoutSubviews
, что ускорило процесс перераспределения элементов.addSubviewWithConstraints
, который позволяет добавлять подчиненные элементы с помощью ограничений Auto Layout.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.addSubviewWithConstraints
, который позволяет добавлять подчиненные элементы с помощью ограничений Auto Layout.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.layoutSubviews
.layoutSubviews
, что ускорило процесс перераспределения элементов.Исправ#### Добавлено
Добавлена новая раскладка MyPathLayout: с её помощью можно создать путь, используя уравнение для генерации кривой пути, а также указывать расстояние между подэлементами вдоль этого пути. Это позволяет подэлементам располагаться по указанному пути, что открывает возможности для создания уникальных эффектов. (Дополнительно см. PLTest1,2,3,4ViewController).2. Добавлен новый метод для подэлементов: @property(nonatomic,copy) void (^viewLayoutCompleteBlock)(MyBaseLayout* layout, UIView *v);
. Этот метод вызывается после завершения каждого подэлемента и затем автоматически уничтожается. Вы можете использовать этот блок для выполнения различных действий после завершения расстановки подэлементов, таких как анимация или получение значений. (Дополнительно см. RLTest1ViewController, PLTest1ViewController).
Поддержана возможность изменения координат подэлементов через преобразование (transform
). При использовании этого свойства можно контролировать размер и положение подэлементов.
subviewMargin
, система будет автоматически делить границы пополам. (Дополнительно см. TLTest3ViewController).adjustScrollViewContentSize
был отмечен как устаревший и заменён на использование нового свойства adjustScrollViewContentSizeMode
.weight
.weight
) для подэлементов. Коэффициент weight
определяет долю свободного пространства, которое занимает каждый подэлемент. Это позволяет использовать потоковую раскладку вместо линейной для многих случаев, тем самым уменьшая количество уровней расстановки. (Дополнительно см. FLLTest4ViewController).2. Добавлено свойство для обратного порядка расстановки подэлементов: @property(nonatomic, assign) BOOL reverseLayout;
. Это свойство позволяет выполнять расстановку подэлементов в обратном порядке относительно их добавления. (Дополнительно см. AllTest4ViewController).A.heightDime.equalTo(A.widthDime)
. Поддержка отсутствует в горизонтальной линейной компоновке.myLeftMargin
, myRightMargin
и gravity=MyMarginGravity_Vert_Center
. Та же проблема наблюдается в горизонтальной линейной компоновке.setSubviewFloatMargin
для плавающего макета MyFloatLayout (подробнее см. FOLTest4ViewController).Добавлены два свойства для управления расстоянием между строками таблицы: rowSpacing
и колонками: colSpacing
. Эти свойства позволяют установить расстояние между строками и столбцами в таблице. (Детали см. TLTest2ViewController)
Внесены изменения в методы для создания анимации при применении макета: layoutAnimationWithDuration
, который позволяет реализовать анимацию при создании макета. (Детали см.: все демо)
Расширено использование свойства flexedHeight
для UIImageView. При установке значения flexedHeight
равным YES, высота UIImageView будет автоматически корректироваться пропорционально ширине при выполнении макета. Это особенно полезно при реализации водопадной структуры. (Детали см. TLTest2ViewController)
Для плавающего макета MyFloatLayout добавлены три новых свойства: subviewMargin
, subviewVertMargin
, subviewHorzMargin
, чтобы установить горизонтальное и вертикальное расстояние между виджетами в плавающем макете. (Детали см. FOLTest4ViewController, FOLTest5ViewController)
Добавлена возможность установки максимального и минимального размера для подвиджетов внутри макета. Новые методы lBound
, uBound
в MyLayoutDime предоставляют более мощные возможности по сравнению с прежними методами min
, max
. Они позволяют не только устанавливать константные ограничения размера, но также использовать объекты для ограничения размера. (Детали см. AllTest2ViewController, AllTest3ViewController)
6.Система автоматически решает большую часть возможных конфликтов ограничений макета, что снижает вероятность возникновения таких конфликтов. Также система выдаёт предупреждение и сообщение об ошибке при возникновении конфликта ограничений.#### Обновлено
Оптимизация отступов при плавающем расположении в линейном макете, с поддержкой автоматической корректировки ширины. (Детали см.: AllTest3ViewController)
Улучшение установки положения и размера макета при добавлении его в независимый от макета родительский элемент. Вы можете использовать методы myXXXMargin, а также myHeight и myWidth для установки положения и размера в независимом от макета родительском элементе.
Изменение названий методов управления таблицами addRow:colSize:
и insertRow:colSize:atIndex
, замена colWidth
на colSize
. (Детали см.: TLTest2ViewController)
Изменение специальных значений размеров таблиц в макросах: MTLSIZE_XXXX. (Детали см.: TLTest1ViewController, TLTest2ViewController)
Перепись всех комментариев в коде для лучшего понимания.
Перепись большинства примеров DEMO.
Временная проблема с автоматическим закреплением плавающего макета при добавлении его в UIScrollView была исправлена.
Коррекция проблемы с некорректной оценкой высоты при вложении относительного макета внутри другого макета.
Исправление ошибки при вычислении высоты и ширины в линейном макете.## Версия 1.1.6(2016/5/3)
Добавлен метод _equalTo_
в классе MyLayoutDime, который позволяет сравнивать объект с самим собой. Например, a.widthDime.equalTo(a.widthDime).add(10);
означает, что конечная ширина представления a будет равна ширине её содержимого плюс 10. Такой подход не приводит к циклическому обращению и используется там, где требуется расширение размера на основе текущего размера содержимого (подробнее см.: FLLTest2ViewController).
В потоковом макете MyFlowLayout были добавлены возможности растяжения отступов, размеров и автоматического расположения для решения проблемы заполнения пробелов между элементами строки. Для активации растяжения отступов необходимо установить значение свойства gravity
как MyMarginGravity_Horz_Fill
или MyMarginGravity_Vert_Fill
; для активации растяжения размеров — установить значение свойства averageArrange
как YES; а для активации автоматического расположения — установить значение свойства autoArrange
как YES (подробнее см.: FLLTest2ViewController).
Добавлена новая расширенная характеристика представления noLayout
. Установка значения этой характеристики как YES означает, что подпредставление будет участвовать в макете, но фактические изменения положения и размера будут игнорироваться, а основной макет будет сохранять пространство для этого подпредставления.Эта характеристика используется вместе с useFrame
для реализации некоторых эффектов анимации (подробнее см.: FLLTest3ViewController).
Макетный контейнер MyFrameLayout теперь поддерживает установку значений wrapContentHeight
и wrapContentWidth
как YES.
В макетном представлении добавлен новый параметр highlightedOpacity
, который указывает уровень непрозрачности при высветлении события касания (подробные примеры см.: AllTest1ViewController).
Исправлен баг в компоненте MyTableLayout.
Все комментарии в библиотеке макетов были переформатированы и скорректированы.
Оптимизированы некоторые вопросы производительности в макетах.
Удалено совместимое использование устаревшего кода. ## [V1. 1. 5](https://github.com/youngsoft/MyLinearLayout/releases/tag/1. 1. 5) (2016/4/7)
Добавлен новый макет MyFloatLayout, который позволяет располагать нерегулярные подэлементы и карточки. Концепция была вдохновлена свойством CSS float в HTML.
Введена возможность автоматического создания границ между элементами с помощью умной линии границ, что позволяет создавать границы между элементами без необходимости ручного настройки.
Устранены проблемы с некорректным вычислением значений wrapContentHeight
и wrapContentWidth
.
Исправлена проблема с некорректным вычислением ширины leftBorderLineLayer
.
Добавлен метод clear
в классах MyLayoutDime и MyLayoutPos для быстрого удаления всех настроек.
Оптимизированы производительность и скорость.## V1.1.4 (2016/3/10)
Исправлен баг в функции оценки размера estimateLayoutRect
, которая некорректно работала при многократном вложении.
Добавлен атрибут myMargin
для простой и быстрой установки одинаковых значений для myLeftMargin
, myTopMargin
, myRightMargin
и myBottomMargin
.
Введен класс инструментов MyDimeScale для масштабирования размеров и положений на разных экранах. Это позволяет адаптироваться к различным устройствам, таким как iPhone 6, где высота может быть увеличена на iPhone 6 Plus и уменьшена на iPhone 5.## V1.1.3 (2016/2/22)
Добавлена поддержка SizeClass для портретного режима MySizeClass_Portrait и пейзажного режима MySizeClass_Landscape. Это позволяет отдельно настраивать интерфейсы для горизонтального и вертикального режимов, особенно полезно для iPad.
Полностью обновлено приложение, добавлена поддержка SizeClass, что позволяет обеспечивать идеальную адаптацию для устройств Apple различных размеров. Поддержка SizeClass реализована на основе возможностей Apple, поэтому она доступна только в версиях iOS 8 и выше.
В потоковом распределении MyFlowLayout добавлена возможность использования метода заполнения контейнера с учетом содержимого. Когда arrangedCount
установлено значение 0, это указывает на использование метода заполнения контейнера с учетом содержимого.
Добавлен новый расширенный атрибут представления mySize
, чтобы упростить одновременную установку значений myWidth и myHeight.
Базовый класс размещения MyLayoutBase переименован в MyBaseLayout.
Устранены проблемы, связанные с возможной бесконечной рекурсии при создании производных классов от MyLinearLayout или MyFlowLayout.
Добавлена поддержка свойства autoresizesSubviews
для представлений размещения.Это свойство по умолчанию установлено как YES; если его значение NO, то представление размещения не будет выполнять никаких действий по размещению, то есть все значения frame для подчинённых представлений будут окончательными результатами размещения. Эта функциональность используется главным образом для реализации анимации подчинённых представлений.
Устранены другие ошибки. ## [V1.1.1]
Добавлен новый атрибут mySize для установки ширины и высоты layouts, что эквивалентно одновременному заданию myWidth и myHeight.
Устранены проблемы с неправильной позиционировкой при использовании вместе с AutoLayout в iOS, теперь версия может совместно работать как с frame, так и с AutoLayout.
Внесены исправления других мелких проблем, а также улучшена и завершена документация.
Переименованы методы leftMargin, rightMargin, topMargin, bottomMargin, width, height, centerXOffset, centerYOffset, centerOffset для решения конфликтов имён. В новой версии все эти методы имеют префикс my. Для использования старых методов можно определить макросы: #define MY_USEOLDMETHODDEF 1
и #define MY_USEOLDMETHODNOWARNING 1
.
Переопределены типы перечислений MarginGravity и LineViewOrientation на MyMarginGravity и MyLayoutViewOrientation соответственно. Для обратной совместимости можно использовать макросы #define MY_USEOLDENUMDEF 1
и #define MY_USEOLDENUMNOWARNING 1
. ## [V1.1.0]
Добавлен новый поточный макет MyFlowLayout.В линейном макете добавлена возможность установки горизонтального центрирования по ширине экрана и вертикального центрирования по высоте экрана с помощью свойства gravity
.
Добавлена возможность установки фонового изображения для макета backgroundImage
и выделенного фонового изображения highlightedBackgroundImage
.
Добавлены ограничения максимального max
и минимального min
значений смещения view
и размера constraint
.
Добавлен метод оценки размеров макета estimateLayoutRect
и возможность установки оценочного rect
значения для view
.
Добавлена возможность установки высоты и ширины подмакетов в рамках макета frame layout
, позволяющая задавать высоту или ширину как масштабированное значение от высоты или ширины родительского макета, а также возможность задания равной высоты и ширины.
Добавлена возможность установки отступа между равномерно распределёнными подмакетами subviewMargin
в линейном макете.
Добавлена возможность исключения некоторых подмакетов из процесса макетирования путём установки свойства useFrame
в YES
.
Добавлена возможность установки целевых объектов при нажатии setTouchDownTarget
и отмене нажатия setTouchCancelTarget
для макета.
Добавлена возможность установки расстояния между равномерно распределёнными подмакетами averageSubviews
в линейном макете.
Добавлен метод очистки настроек макета resetMyLayoutSetting
.
Устранено использование большого объёма памяти при макетировании.Исправлено отсутствие эффекта прокрутки при добавлении UIScrollView внутри макета.
Оптимизированы решения конфликтов ограничений.
Оптимизирована функциональность корректировки положения и размера макета при его добавлении к некорневому макету.
Исправлено отсутствие перерисовки интерфейса при восстановлении скрытых подмакетов.
Исправлено отображение отступа границ макета.
Исправлены возможные проблемы при добавлении макета в UITableView и UICollectionView.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )