UIActivityViewController удаляет избыточное пространство при совместном использовании сообщений

У меня есть аналогичный код в моем проекте, и я получаю избыточное пространство между элементами общего доступа. Можно ли удалить его?

let text = "Some text\n"
let link = NSURL(string: "http://stackoverflow.com/")!

let items = [text, link]
let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)

self.presentViewController(activityVC, animated: true, completion: nil)

введите описание изображения здесь

Ответ 1

Используйте NSString вместо NSURL в соответствии с приведенным ниже кодом:

NSString *text = @"Some Text";
NSString *URL = @"\nhttp://www.apple.com";
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:@[text, URL] applicationActivities:nil];

[self presentViewController:controller animated:YES completion:nil];

------------------- Swift Code (по запросу) -------------

let text = "Some text"
let link = "\nhttp://stackoverflow.com/"

let items = [text, link]
let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)

self.presentViewController(activityVC, animated: true, completion: nil)

Вы можете увидеть прикрепленные скриншоты. После отправки/отправки сообщения он по-прежнему будет отображаться как ссылка.

URL добавляет пробел по умолчанию, если URL-адрес не является первым объектом в массиве элементов активности.

Надеюсь, что это поможет.

введите описание изображения здесь

Ответ 2

Обновление: Вот комплексное решение. Кажется, что только "Message" не работает, поэтому я использую два объекта активности для работы.

Вы должны создать два класса, которые соответствуют протоколу UIActivityItemSource. Я не знаком с Swift, поэтому они реализованы с помощью Objective-C, я считаю, что вы можете понять.

1 ActivityObject класс

@interface ActivityObject : NSObject

@end

@implementation ActivityObject

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    return @"some Text";
}

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
    if ([activityType isEqualToString:@"com.apple.UIKit.activity.Message"]) {
        return @"Some text\nhttp://stackoverflow.com/";
    } else {
        return @"Some text";
    }
}
@end

2 ActivityObjectURL класс

@interface ActivityObjectURL : NSObject

@end

@implementation ActivityObjectURL

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    return @"";
}

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
    if ([activityType isEqualToString:@"com.apple.UIKit.activity.Message"]) {
        return @"";
    } else {
        return [NSURL URLWithString:@"http://stackoverflow.com"];
    }
}

@end

Затем используйте их так.

ActivityObject *o = [[ActivityObject alloc] init];
ActivityObjectURL *ol = [[ActivityObjectURL alloc] init];
UIActivityViewController *avc = [[UIActivityViewController alloc] initWithActivityItems:@[o, ol] applicationActivities:nil];
[self presentViewController:avc animated:YES completion:nil];

Решение @dsiddhpura добавит нечетный разрыв строки в приложении Mail.

введите описание изображения здесь введите описание изображения здесь

Ответ 3

Я думаю, что в другом месте должно быть что-то неправильно. Я попытался воспроизвести ваш случай с помощью следующего кода

    let text = "Some text"
    let text2 = "ABC text"
    let text3 = "DEF text"
    let link = NSURL(string: "http://stackoverflow.com/")!

    let items = [text, text2, text3, link]
    let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)

    self.presentViewController(activityVC, animated: true, completion: nil)
  • При выборе "Копировать", затем вставьте его, я получил: Some text ABC text DEF text http://stackoverflow.com/

  • Когда вы хотите делиться через сообщение, я получил Some text ABC text DEF text http://stackoverflow.com/

который является правильным (по умолчанию). Невозможно изменить это поведение по умолчанию, кстати.

Если вы все еще хотите сделать это, измените свой текстовый формат, например, предложенный @KudoCC, или создайте пользовательский UIActivity.

Удачи.

Ответ 4

Попробуйте.

let text = "Some text"
let link = NSURL(string: "\nhttp://stackoverflow.com/")!
let items = [text, link]
let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)
self.presentViewController(activityVC, animated: true, completion: nil)