[英]iOS 10 Camera view showing API_Cancel_Title instead of Cancel
我正在使用iOS 10和使用相機拍照的應用程序。 當相機視圖打開時,而不是取消按鈕,標題為“API_CANCEL_TITLE”。 當我捕捉到整個標題看到的圖片時,我想要的不是這個長標題,而是看起來“取消”。 我使用過應用本地化。 我搜索了幾個鏈接但找不到解決方案。
這是屏幕截圖:
這只發生在iOS 10中,在iOS 9中它將正常工作在這里是代碼:
- (IBAction)takePicturePressed:(UIButton *)sender
{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion:nil];
}
請建議......
我使用BundleLocalization接近了同樣的問題,並且我已經跟蹤了它從一個包中獲取的UIImagePickerController
鍵。
事實證明,它使用了4個“表”(在NSBundle命名法中):
CameraUI
(用於相機) PhotoLibraryServices
(適用於PhotoLibrary) PhotoLibrary
(適用於PhotoLibrary) PhotosUI
(適用於PhotoLibrary) 在我的情況下,我必須做的就是本地化UIImagePickerController
接口,它在項目中創建了幾個.strings
文件並對它們進行了本地化。
下面提到的文件的內容與我見過的鍵(標准英語值),他們是非常自我解釋
CameraUI.strings "PHOTO" = "PHOTO"; "AEAF_LOCK_TEXT" = "AE/AF LOCK"; "API_CANCEL_TITLE" = "Cancel"; "HDR_AUTO" = "Auto"; "HDR_ON" = "On"; "HDR_OFF" = "Off"; "TIMER_OFF_TEXT" = "Off"; "USE_PHOTO" = "Use Photo";
PhotoLibraryServices.strings
"CANCEL" = "Cancel";
"RETAKE" = "Retake";
"STREAM_SHARED_BY_ME_SUBTITLE" = "From You";
"STREAM_SHARED_BY_SUBTITLE" = "From %@";
"ALBUM_IMAGE_COUNT_FORMAT" = "%@ Photos";
"ALBUM_VIDEO_COUNT_FORMAT" = "%@ Videos";
"1_ALBUM_PHOTO" = "1 Photo";
"1_ALBUM_VIDEO" = "1 Video";
"ALBUM_TWO_TYPES_LABEL_COMMAS" = "%@, %@";
PhotoLibrary.strings
"CANCEL" = "Cancel"; "RETAKE" = "Retake"; "STREAM_SHARED_BY_ME_SUBTITLE" = "From You"; "STREAM_SHARED_BY_SUBTITLE" = "From %@"; "ALBUM_IMAGE_COUNT_FORMAT" = "%@ Photos"; "ALBUM_VIDEO_COUNT_FORMAT" = "%@ Videos"; "1_ALBUM_PHOTO" = "1 Photo"; "1_ALBUM_VIDEO" = "1 Video"; "ALBUM_TWO_TYPES_LABEL_COMMAS" = "%@, %@";
PhotosUI.strings
"ALL_PHOTOS_IN_LIBRARY" = "Moments"; "PXUserCollectionsSectionTitle" = "My Albums"; "FULL_PHOTOS_GRID_ZOOM_LEVEL_TITLE" = "Moments"; "NO_PHOTOS_OR_VIDEOS" = "No Photos or Videos"; "EMPTY_ALBUM_LIST_MESSAGE_iPhone" = "You can take photos and videos using camera, or sync photos and videos onto your iPhone using iTunes";
我有一個方法,我知道它不是一個完美的解決方案,但是在得到一個完美的解決方案之前,我們可以使用它:
使用自定義相機視圖。 如果設備版本為10或大於10,則使用條件進行管理,然后執行自定義攝像機視圖設置,否則使用默認攝像機視圖。
通過使用自定義視圖,API_Cancel_Title按鈕隱藏,其余功能運行良好。 以下是我用作參考的鏈接: 從自定義相機中刪除取消按鈕
在這個Bundle擴展您需要檢查tableName中的CameraUI。 使用它將“Api_Cancel_title”鍵的值更改為“取消”使用您自己的本地化值,用於聲明您自己的值
例如
英語“API_CANCEL_TITLE”=“取消”;
印地語“API_CANCEL_TITLE”=“रद्दकरना”;
法語“API_CANCEL_TITLE”=“Annuler”;
// MARK: - Bundle Extension
extension Bundle {
@objc func specialLocalizedStringForKey(_ key: String, value: String?, table tableName: String?) -> String {
let currentLanguage = CSLanguage.currentAppleLanguage()
var bundle = Bundle.main
if let path = Bundle.main.path(forResource: currentLanguage, ofType: "lproj") {
bundle = Bundle.init(path: path)!
} else {
let basePath = Bundle.main.path(forResource: "Base", ofType: "lproj")
bundle = Bundle.init(path: basePath!)!
}
if let name = tableName, name == "CameraUI"{
let values = NSLocalizedString(key, comment: name)
return values
}
if let name = tableName, name == "PhotoLibrary"{
let values = NSLocalizedString(key, comment: name)
return values
}
if let name = tableName, name == "PhotoLibraryServices"{
let values = NSLocalizedString(key, comment: name)
return values
}
if let name = tableName, name == "PhotosUI"
{
let values = NSLocalizedString(key, comment: name)
return values
}
return bundle.specialLocalizedStringForKey(key, value: value, table: tableName)
}
}
確保在應用程序中沒有使用本地化,如果使用本地化,則正確配置所有字符串文件。
在您的字符串文件中搜索API_CANCEL_TITLE
,然后將其設置為“ Cancel
。
因為UIImagePickerController
的Cancel
按鈕將根據本地化而改變。
當您在Bundle類中覆蓋localizedString函數時會出現此問題,這將阻止系統獲得reight本地化值的時間。
並且一些開發人員在想要更改應用程序的語言並在不關閉應用程序的情況下立即顯示更改時覆蓋此功能,因此找到另一種方法並嘗試不覆蓋此功能
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.