iOS開發百問(11)

來源:互聯網
上載者:User

標籤:


131、如何限制ScrollView在某個方向上不可滾動?

例如,要限制x方向上不可滾動,可以實現UIScrollViewDelegate協議方法:

func scrollViewDidScroll(scrollView: UIScrollView) {

        ifabs(scrollView.contentOffset.x) > 0 {

            scrollView.contentOffset= CGPointMake(0, scrollView.contentOffset.y)

        }

}

 

132、如何在Swift Framework目標中匯入O-C架構

以BmobSDK 為例(CommonCrypto等C/O-C架構也是一樣的),當你將BmobSDK添加到Link Binary With Libraries中時,當你使用“importBmobSDK”語句時,出現錯誤:no such module

如果你試圖使用bridging headers匯入BmobSDK,則會導致另一個錯誤。

這是由於Swift Framework不支援bridging headers檔案。

解決這個問題,需要經過以下步驟:
1) 在項目目錄中建立BmobSDK目錄,將BmobSDK.framework放到這個目錄。同時在這個目錄下建立一個module.map檔案,內容如下:

module BmobSDK [system] {

    header"/Users/kmyhy/Documents/Swift/code/第12章/kNote/BmobSDK/BmobSDK.framework/Headers/Bmob.h"

    link "BmobSDK"

    export *

}

這將允許我們將BmobSDK當做Swift module來使用。

2) 在Build Settings中,找到Import Paths(SWIFT_INCLUDE_PATHS),增加BmobSDK目錄。如所示:

3)在swift檔案中匯入BmobSDK架構:

import BmobSDK

 

133、如何在App Extension中使用CocoaPods

在 Podfile中加入此句:

link_with ‘擴充的名字‘

添加bridging header檔案,並設定Objective-C BridgingHeader。

134、錯誤‘xxx.pch‘ has been modified since the precompiled header was builterror in Xcode

執行深度Clean(快速鍵Option+Command+Shift+K)

 

135、Document Provider擴充中,DocumentPickerViewController的documentStorageURL屬性返回為nil。

確認容器App,Document Provider擴充和File Provider擴充的App Groups設定正確,如果有任何驚歎號,請Fixed。

136、插入和刪除CollectionView中的Cell

跟TableView一樣,我們可以用insertItemsAtIndexPaths()/deleteItemsAtIndexPaths()插入/刪除儲存格。不同的是CollecionView不再支援beginUpdates()/endUpdates()操作。預設已支援插入/刪除動畫,如果不想要預設動畫效果,可以設定UIView的animationsEnabled屬性:

BOOL animationsEnabled = [UIView areAnimationsEnabled];

[UIView setAnimationsEnabled:NO];

[myCollectionView reloadItemsAtIndexPaths:myIndexPaths];

[UIView setAnimationsEnabled:animationsEnabled];

 

137、UIScrollView中的UICollectionView不會滾動

檢查UIScrollView是否被設定了delegate屬性,同時檢查在delegate中是否實現了scrollViewDidScroll方法。如果是,請刪除該方法(僅僅取消delegate屬性是不行的)。

同時檢查UICollectionView的寬度(或寬度約束)、高度(或高度約束),以及列表內容大小,因為當列表內容小於UICollectionView的寬(或高)時,該方向的捲軸不會出現。

138、儲存格使用UITableViewCellStyleValue1,為什麼顯示不正確?

UITableViewCell 有幾個內建的類型,如UITableViewCellStyleDefault、UITableViewCellStyleValue1、UITableViewCellStyleValue2。

這些Cell都是SDK預先配置的,它們呈現固定的內建樣式,比如字型大小、顏色、對齊等。如果你在想修改這些配置,很可能顯示不正常,比如有的文本一下子能顯示,一下子又不顯示,或者一下子顯示固有字型(及顏色),一下子(比如說點擊儲存格)又顯示修改後的字型(及顏色)。

在這種情況下,你最好定製自己的儲存格(子類化)。

139、boundingRectWithSize 計算出的尺寸不正確?

注意提供正確的options參數。對於UILabel,至少需要使用UsesLineFragmentOrigin和UsesFontLeading兩個選項:

CGRect paragraphRect =

  [attributedTextboundingRectWithSize:CGSizeMake(300.f, CGFLOAT_MAX)

options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)

  context:nil];

140、Swift中無法對多個枚舉值進行按位或(|)運算

注意,這個問題在 iOS 8.3 SDK Beta 1 (12F5027d)中已解決。對於低於此版本的SDK,我們可以用以下代碼代替:

let options =unsafeBitCast(NSStringDrawingOptions.UsesLineFragmentOrigin.rawValue |

                   NSStringDrawingOptions.UsesFontLeading.rawValue,

                   NSStringDrawingOptions.self)

               

let frame = text.boundingRectWithSize(size, options:options, attributes:D,context:nil)

iOS開發百問(11)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.