Он должен иметь правильную компоновку, если вы замените:
titleImageView.frame = CGRect(x: 0, y: 0, width: 34, height: 34)
на:
NSLayoutConstraint(item: titleImageView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 34).isActive = true
NSLayoutConstraint(item: titleImageView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 34).isActive = true
Как объяснено в предыдущем ответе, кадр вида заголовка, вероятно, не 34x34 при во время выполнения. Вместо этого он частично определяется размером изображения (размер внутреннего содержимого UIImageView зависит от размера изображения) и конфигурацией Auto Layout UINavigationBar.
Если вы запустите отладчик представления, вы можете увидеть, что кадр представления заголовка имеет размер примерно 150x44, поэтому он смещается в одну сторону, чтобы освободить место для всего в UINavigationBar.
Инструмент отладки представления расположен в нижней панели внутри XCode (в верхней части области отладки):
Это позволяет вы проверяете фреймы, ограничения и многое другое в иерархии представлений и часто подсказывает, что может быть не так, когда сталкиваетесь с подобными проблемами.
Извините, у меня была та раздражающая проблема и в Outlook 2003 и в Outlook 2 007 дополнений, и единственное решение, которое работало, состояло в том, чтобы купить Освобождение лицензия. В Outlook 2007, который должно только разоблачить противное всплывающее окно, если Ваш брандмауэр снижается или Ваше антивирусное программное обеспечение устарело насколько я вспоминаю.
Если Вашим приложением не является Outlook, включают Вас, может посмотреть MAPI для чтения данных с ящика входящих сообщений
Попробуйте
Сервис -> Макрос -> Безопасность -> Программный доступ
Затем выберите Никогда не предупреждать меня о подозрительной активности.
«Но я ищу решение, которое не требует какой-либо сторонней библиотеки COM. "
Вы не найдете его. Каспер уже указал на единственное известное мне решение. Погашение было единственной вещью, которая поддерживала плагины и код Outlook для работы. Я сделал коммерческие надстройки Outlook для Франклина Кови. Мы исследовали много вещей, но Искупление было единственным, что помогло нам преодолеть это препятствие.
Я столкнулся с той же проблемой при доступе к адресу электронной почты отправителя для почтового элемента Outlook. Чтобы избежать «предупреждения системы безопасности», не создавайте новый объект Application, вместо этого используйте Globals.ThisAddIn.Application для создания нового элемента почты.
string GetSenderEmail(Outlook.MailItem item)
{
string emailAddress = "";
if (item.SenderEmailType == "EX")
{
Outlook.MailItem tempItem = (Outlook.MailItem)Globals.ThisAddIn.Application.CreateItem(Outlook.OlItemType.olMailItem);
tempItem.To = item.SenderEmailAddress;
emailAddress = tempItem.Recipients[1].AddressEntry.GetExchangeUser().PrimarySmtpAddress.Trim();
}
else
{
emailAddress = item.SenderEmailAddress.Trim();
}
return emailAddress;
}
Для этого мы используем Advanced Security for Outlook от Mapilab. Это бесплатно, также для коммерческого использования, и по-прежнему обеспечивает безопасность Outlook (разрешая доступ только из утвержденных приложений). Просто в сравнении с ранее упомянутыми решениями, которые стоят либо денег, либо могут поставить под угрозу безопасность.
Вы можете отключить всплывающее окно безопасности с помощью Центра управления безопасностью Outlook. Проверьте здесь .