Earlier before iOS 7, UITextView uses the web-kit under the hood to render the input by HTML, when we give attributed text. But for many other customisations for many number of lines and complicated functionality, Core-Text is the option left for developers. is a low level frame work which resides on top of the framework in iOS kernel. In other words, Core-Text is a low level Text-engine that when we use along side the frameworks, gives the fine -grained control over and Core-Text : Core-Text Core-Graphics Core-Graphics/Quartz layout formatting. Text-Kit : With iOS 7, Apple released a high level library called Text-Kit, Which is one layer above the Core-Text, and interacts with core text behind the hoods. So developers can avail of this new library(Text-Kit) APIs, for customising the layouts and formats in their App designs. It inherits all the main functionalities of core text and wraps them into objects to provide the needed APIs for the developers. In the need of modifying text details, such as font or layout attributes, one had to deal with , a powerful framework, yet hard to work with. Things became better with , where views could also display rich text, images etc. Core Text attributed strings UITextView TextKit gives us, Rich Text Editing Formatting and syntax highlighting Custom-Layout User Interaction Annotations, Text Effects, Custom Input Behaviour, Text Highlighting, Interaction with UI, etc. → TextKit in iOS handles 3 types of text-attributes. They are Character Attributes These include traits such as Font, colour, subscript which can be associated with an individual character or range of characters. Paragraph Attributes These include Indentation, tabs , line-spacing, etc. These affect the way the Layout Manager arranges lines of text into paragraphs on page. These all are encapsulated into a separate class called NSParagraphStyle Document Attributes These include document traits such as paper-size, margins, view-zooming, etc. → Each in a block of text has a dictionary of , [NSAttributedStringKey.Type: Any] associated with it. character keys and values → Text Kit is composed by three primary classes: The Text Storage class (NSTextStorage) The Layout Manager class (NSLayoutManager) The Text Container class (NSTextContainer) It is a sub class of Class, with the role of storing all the text related information (NSTextAttributedString) such as fonts, paragraph styles, text colours, sizes etc. Its role is also to make sure that all the edited-text-attributed data to be consistent throughout the management and editing sessions. NSTextStorage : NSMutabbleAttributedString As it name implies, this class role is to manage the Text data display on a view object. It takes text data(such as attributed data) from NSTextStorage object, to render the same editing/changes on the view. It gets notified by NSTextStorage object, whenever the changes made to Text-attributes, so every change immediately gets reflected in the Text-input-Views. NSLayoutManager : It handles and support any View object that can be displayed text in it, and perform operations to render unicode characters clearly on views. Note: Strings/ string characters are available in many forms such as ASCII, Unicode, etc. NSLayoutManager object(iOS) supports all unicode characters, So when you encode/decode strings with unicode characters, (such as utf8, utf16) we get some value, so we can safely force unwrap the results. It specifies the views, where the text to be drawn. It manages and handles the view object frames and bounds to specify the text drawing area. It also keep the information of UIBezierPaths (paths) in form of an array, in order to define the text drawing areas from excluding the non text related objects such as images. This way we can show the images and other not text related objects in the text container, with out overlapping with text. NSTextContainer : → → . Note : Except UIWebView, which works with Web-kit frame work, all other remaining Text input fields/views such as UITextView, UITextField, and UILabel objects work with Text-Kit Core-Text Core-Graphics In Text Kit, an _NSTextStorage_ object stores the text that is displayed by a _UITextView_ object and laid out by an _NSLayoutManager_ object into an area defined by _NSTextContainer_ object. And here is the relationship between them. Note: In typography, a glyph is an elemental symbol within an agreed set of symbols, intended to represent a readable character for the purposes of writing.Learn more about Glyphs here In simple words, Glyph is The visual representation of a character that you see. Other Notes: it is sufficient to apply paragraph style to the first character of a paragraph. Text’s vertical position will be configured by independently and separating by using TextView’s properties. If range is == 0, means inserting text else selected or replacing text → All the above mentioned classes have a lot of useful methods to work with RichTextFormat, and further we can extend or sub-class them to configure more. We can subclass the TextStorage, TextContainer, TextAttachment, NSAttributedStrings, NSLayoutManager, etc. UITextVIew can be initialised programatically with custom TextStorage, LayoutManager and TextContainer objects. — — — — — — — — — *********************** — — — — — — — — — If you like my tutorials please follow me on & accounts. , medium twitter linkedIn Thanks for reading… ****************************! !**************************** See you