Я решил ту же проблему в одном из своих приложений.
Подход, который я выбрал, состоял в том, чтобы сначала структурировать мою базовую модель данных таким образом, чтобы фрагменты данных имели достаточную степень детализации, чтобы при необходимости можно было создавать различные представления. Другими словами, вместо одного свойства для «имени» у меня есть три свойства. Один для «имени», один для «второго имени» и третий для «фамилии». Я также создал отдельный объект «слой данных», чтобы можно было легко получать фрагменты своих данных из любой точки приложения.
Далее, чтобы построить мое представление, которое показывает данные в виде представления формы. Используя Interface Builder, я просто разложил представление, используя в качестве заполнителей объекты вида UILabel. Затем, когда пользователь переключается между представлениями людей, я вызываю объект уровня данных для фрагментов данных и просто «заполняю» заполнители UILabel.
Я также отображаю PDF-файл в форме абзаца. Подобно тому, что вы делаете. Для этого я использую NSMutableString вместе с удобным методом NSString stringWithFormat. Используя NSMutableString, вы можете объединять строки с символами новой строки, встроенными по мере необходимости. Для этого я также вызываю объект уровня данных для фрагментов данных.
[[NSString stringWithFormat:@"Date of Visit: %@", dateOfVisitString] drawInRect:stringRect withFont:theFont];
Надеюсь, это поможет. Удачи.