Я предполагаю, что вы хотите добавить несколько кнопок по горизонтали (например, с помощью обычного элемента управления рейтингом «звездочки»).
A UIStackView
, как можно догадаться из его метода .addArrangedSubview()
, организует свои подпредставления, основываясь на его .axis
, .alignment
, [ 114] и .spacing
свойства, а также его frame
.
Итак, прочитайте немного о UIStackView
и о том, как его можно использовать. Скорее всего, вы в настоящее время ограничиваете свой пользовательский вид:
Так добавление вашей кнопки в качестве arrangedSubView
приводит к ее растяжению до ширины стека, потому что это значение по умолчанию.
Добавление его в качестве subview
просто накладывает кнопку на представление стека, вместо того, чтобы позволить стековому представлению упорядочить его, и ваш вид стека, скорее всего, тогда будет иметь высоту ноль - поэтому кнопка не может быть нажата. 1121]
Попробуйте установить только верхние и ведущие ограничения , когда добавляете свой пользовательский вид стека. Это должно дать вам кнопку 44 x 44
, которую можно нажать.
Когда вы добавляете больше кнопок с помощью .addArrangedSubview()
, эти кнопки будут располагаться горизонтально, что, вероятно, вам и нужно.
Формат для дженериков является именем, 'символом, количеством параметров типа, сопровождаемых разграниченным запятой списком типов в скобках:
Type.GetType("System.Collections.Generic.IEnumerable`1[System.String]");
Я не уверен, что существует простой способ преобразовать из синтаксиса C# для дженериков к виду строки, которую хочет CLR. Я начал писать быстрый regex для парсинга его как Вы упомянутый в вопросе, но понял, что, если Вы не бросаете способность вложить дженерики как параметры типа, парсинг станет очень сложным.
Выезд Activator.CreateInstance
- можно назвать его с типом
Activator.CreateInstance(typeof(MyType))
или с именем сборки и именем типа как string
Activator.CreateInstance("myAssembly", "myType")
Это приведет Вам пример типа, в котором Вы нуждаетесь.
Если Вам нужно Type
вместо экземпляра, используйте Type.GetType()
метод и полностью определенное название типа Вы интересуетесь, например:
string s = "System.Text.StringBuilder";
Type myClassType = Type.GetType(s);
Это даст Вам Type
рассматриваемый.
Чтобы просто получить текстовый объект от строки используйте:
Type mytype = Type.GetType(typeName);
Можно затем передать это Activator.CreateInstance()
:
Activator.CreateInstance(mytype);
У меня нет большого количества времени для парсинга через это, хотя я думаю, что видел некоторые подобные ответы. В частности, я думаю, что они делают точно, что Вы хотите сделать здесь:
Платформа объекта универсальная ошибка репозитория
(String.Format("[{0}]", baseType.Name.ToString())).OfType<T>();
Надо надеяться, это помогает, сообщите мне более конкретно, если это не.